Sql server 要在具有任何(,)分隔符(2)的单列中检索的XML值

Sql server 要在具有任何(,)分隔符(2)的单列中检索的XML值,sql-server,xml,Sql Server,Xml,当我这样问的时候 declare @x xml = '<Detials xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Tests> <Test Name="Test1" TotalMarks="100">95</Test> <Test Name="Test2" TotalMarks="200">65</Test> <Test Name="

当我这样问的时候

declare @x xml =
'<Detials xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Tests>
  <Test Name="Test1" TotalMarks="100">95</Test>
  <Test Name="Test2" TotalMarks="200">65</Test>
  <Test Name="Test3" TotalMarks="150">95</Test>
  <Test Name="Test4" TotalMarks="150"></Test>
   </Tests>
   <Tests>
  <Test Name="Test1" TotalMarks="100">95</Test>
  <Test Name="Test2" TotalMarks="200">65</Test>
  <Test Name="Test3" TotalMarks="150">95</Test>
  <Test Name="Test4" TotalMarks="150"></Test>
    </Tests>
</Detials>'
我是这样的

declare @x xml =
'<Detials xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Tests>
  <Test Name="Test1" TotalMarks="100">95</Test>
  <Test Name="Test2" TotalMarks="200">65</Test>
  <Test Name="Test3" TotalMarks="150">95</Test>
  <Test Name="Test4" TotalMarks="150"></Test>
   </Tests>
   <Tests>
  <Test Name="Test1" TotalMarks="100">95</Test>
  <Test Name="Test2" TotalMarks="200">65</Test>
  <Test Name="Test3" TotalMarks="150">95</Test>
  <Test Name="Test4" TotalMarks="150"></Test>
    </Tests>
</Detials>'
名称列表 Test1,Test2,Test3,Test4,Test1,Test2,Test3,Test4

但是,我们希望基于可以得到如下结果的

名称列表 测试1,测试2,测试3,测试4 测试1,测试2,测试3,测试4

在使用查询和值连接字符串之前,请在这里帮助我将原始XML拆分为单独的行

提前感谢,Jayendran

尝试以下解决方案:

SELECT STUFF(
    @x.query('for $a in (*:Detials/Tests/Test/@Name) 
        return <a>{concat(",", $a)}</a>')
    .value('.', 'NVARCHAR(MAX)'), 
    1, 1, '') AS ListOfName

谢谢@Bogdan Sahlan!。如果我们将整个xml存储在一个@x变量中,如果我将它存储在一个表的一列中,那么这个示例是完美的。假设我的表是XMLTAble,包含xml文件的列将是Xmlcol。查询将如何相应地更改?@JayendranRosh:请参见编辑1。它给出了错误。我在SELECT 1中看到一个标量变量@x,@x为什么会这样?这是我得到的错误消息137,级别15,状态2,第2行必须声明标量变量@x。Msg 156,级别15,状态1,第6行关键字“AS”附近的语法不正确。@JayendranRosh:上述源代码没有任何错误。您可以通过分析在线演示进行检查。确保你有复制粘贴所有源代码,包括DECLARE语句。你的代码工作得很好。但我要问的是没有声明标量变量@x。这怎么能做到?非常清楚的是,我的整个XML文件都存储在表XMLTable的列XMLCOL下。在这种情况下,我们不需要@x标量变量来存储整个XML文件。因此,在查询过程中,我们可以使用表名和列名本身,而不需要@x标量变量