Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用STUFF在SQL中返回多个XML值_Sql Server_Xml - Fatal编程技术网

Sql server 使用STUFF在SQL中返回多个XML值

Sql server 使用STUFF在SQL中返回多个XML值,sql-server,xml,Sql Server,Xml,我在表的一列中有以下XML值 <wizard id="CF510D2B-BF9C-485B-9D33-0056D1DDFDF2" step="4" sbm="1C766093-633D-E611-80C2-40F2E9DD0D2A"> <reviews> <crd id="AE7F8E74-643D-E611-80C2-40F2E9DD0D2A" /> <rvw id="AF7F8E74-643D-E611-80C2-40F2E9DD0D

我在表的一列中有以下XML值

<wizard id="CF510D2B-BF9C-485B-9D33-0056D1DDFDF2" step="4" sbm="1C766093-633D-E611-80C2-40F2E9DD0D2A">
  <reviews>
   <crd id="AE7F8E74-643D-E611-80C2-40F2E9DD0D2A" />
   <rvw id="AF7F8E74-643D-E611-80C2-40F2E9DD0D2A" />
   <rvw id="B07F8E74-643D-E611-80C2-40F2E9DD0D2A" />
 </reviews>
</wizard>
输出:

AF7F8E74-643D-E611-80C2-40F2E9DD0D2A
期望输出:

AF7F8E74-643D-E611-80C2-40F2E9DD0D2A,B07F8E74-643D-E611-80C2-40F2E9DD0D2A

问题是
[1]
仅获取第一个匹配项,因为您正在使用
函数。您可以将
节点
函数与
一起使用,将值与您启动的技术连接起来

SELECT abc = STUFF((
    SELECT ',' + CONVERT(VARCHAR(50), Review.value('@id', 'uniqueidentifier'))
    FROM dbo.Wizard w
        CROSS APPLY w.[State].nodes('/wizard/reviews/rvw') Reviews (Review)
    WHERE Code = '1C766093-633D-E611-80C2-40F2E9DD0D2A'
    FOR XML PATH('')), 1, 1, '')
下面是一个功能完整的示例,如果它有帮助的话,因为我在上面的代码中假设了您的表和所需的输出:

DECLARE @Wizard TABLE (Code UNIQUEIDENTIFIER, [State] XML)
INSERT @Wizard VALUES ('1C766093-633D-E611-80C2-40F2E9DD0D2A', 
    '<wizard id="CF510D2B-BF9C-485B-9D33-0056D1DDFDF2" step="4" sbm="1C766093-633D-E611-80C2-40F2E9DD0D2A">
      <reviews>
       <crd id="AE7F8E74-643D-E611-80C2-40F2E9DD0D2A" />
       <rvw id="AF7F8E74-643D-E611-80C2-40F2E9DD0D2A" />
       <rvw id="B07F8E74-643D-E611-80C2-40F2E9DD0D2A" />
     </reviews>
    </wizard>')

DECLARE @Text VARCHAR(MAX) = STUFF((
    SELECT ',' + CONVERT(VARCHAR(50), Review.value('@id', 'uniqueidentifier'))
    FROM @Wizard w
        CROSS APPLY w.[State].nodes('/wizard/reviews/rvw') Reviews (Review)
    WHERE Code = '1C766093-633D-E611-80C2-40F2E9DD0D2A'
    FOR XML PATH('')), 1, 1, '')
SELECT @Text
DECLARE@Wizard表(代码唯一标识符,[State]XML)
插入@Wizard值('1C766093-633D-E611-80C2-40F2E9DD0D2A',
'
')
声明@Text VARCHAR(MAX)=STUFF((
选择“,”+CONVERT(VARCHAR(50),Review.value(“@id”,“uniqueidentifier”))
来自@Wizard w
交叉应用w.[State]。节点('/wizard/reviews/rvw')审阅(审阅)
其中代码='1C766093-633D-E611-80C2-40F2E9DD0D2A'
对于XML路径(“”),1,1,“”)
选择@Text

是,[1]只获取第一个。我一直在查询中使用[1]。当我尝试[2]时,它得到了第二个匹配。但我不知道如何获得多个值。选择查询正是我要找的!谢谢你的帮助。:)
DECLARE @Wizard TABLE (Code UNIQUEIDENTIFIER, [State] XML)
INSERT @Wizard VALUES ('1C766093-633D-E611-80C2-40F2E9DD0D2A', 
    '<wizard id="CF510D2B-BF9C-485B-9D33-0056D1DDFDF2" step="4" sbm="1C766093-633D-E611-80C2-40F2E9DD0D2A">
      <reviews>
       <crd id="AE7F8E74-643D-E611-80C2-40F2E9DD0D2A" />
       <rvw id="AF7F8E74-643D-E611-80C2-40F2E9DD0D2A" />
       <rvw id="B07F8E74-643D-E611-80C2-40F2E9DD0D2A" />
     </reviews>
    </wizard>')

DECLARE @Text VARCHAR(MAX) = STUFF((
    SELECT ',' + CONVERT(VARCHAR(50), Review.value('@id', 'uniqueidentifier'))
    FROM @Wizard w
        CROSS APPLY w.[State].nodes('/wizard/reviews/rvw') Reviews (Review)
    WHERE Code = '1C766093-633D-E611-80C2-40F2E9DD0D2A'
    FOR XML PATH('')), 1, 1, '')
SELECT @Text