Sql server 使用SQL将子XML提取到(子元素)列表中

Sql server 使用SQL将子XML提取到(子元素)列表中,sql-server,xml,tsql,Sql Server,Xml,Tsql,我有一个变量,它包含集合中的一组元素。我想要一个孩子的列表…每行1个…但这给了我一行 我尝试过不同的变体……但没有成功 DECLARE@XML='XML' -1 cd5116fa-15f9-48c7-946b-1b199550d014 5029 格里尔中心点 0989745-10 孔口 活跃的 2. 州内 仪表板 -1 26f07f46-c506-4c06-bba9-9ae0e09a72fd 0 TL MCCRARY 14-11H CRP 4523401 孔口 暂时断开 2. 州内 仪表板

我有一个变量,它包含集合中的一组元素。我想要一个孩子的列表…每行1个…但这给了我一行

  • 我尝试过不同的变体……但没有成功

DECLARE@XML='XML'
-1
cd5116fa-15f9-48c7-946b-1b199550d014
5029
格里尔中心点
0989745-10
孔口
活跃的
2.
州内
仪表板
-1
26f07f46-c506-4c06-bba9-9ae0e09a72fd
0
TL MCCRARY 14-11H CRP
4523401
孔口
暂时断开
2.
州内
仪表板
'
挑选
C.value('MeterId[1],'INT')作为MeterId
,C.value('GlobalId[1],'UNIQUEIDENTIFIER')作为GlobalId
,C.value('DeviceId[1],'INT')作为DeviceId
,C.value('MeterName[1]”,'VARCHAR(50')作为MeterName
,C.值('MeterNumber[1]”,'VARCHAR(20')作为MeterNumber
,C.value('MeterTypeName[1]”,'VARCHAR(50')作为MeterTypeName
,C.value('RunStatusCategory[1]”,'VARCHAR(50')作为RunStatusCategory
,C.value('SystemCategoryId[1],'INT')作为SystemCategoryId
,C.value('SystemCategoryName[1]”,'VARCHAR(50')作为SystemCategoryName
,C.value('DataSourceName[1]”,'VARCHAR(50')作为DataSourceName
从@XML.nodes('MeterImportDataItems/MeterImportDataItem')开始,作为T(C)
对于XML路径('MeterImportDataItem'),元素

好吧,我终于明白了

SELECT 
    T.c.query('.') AS MeterImportDataItem  
FROM   @XML.nodes('/MeterImportDataItems/MeterImportDataItem') T(c)  

与其简单地投反对票,不如评论一下原因。你自己的答案没什么可补充的,回答自己的问题也没什么错。可能有人投了反对票,因为他们认为这太简单了。也许可以详细说明一下
.nodes
.query
正在做什么,这样以后找到它的人都会知道understand@Charlieface天啊。。。!!!我从来没有想过我会活得足够长,看到对Stackoverflow的真正积极和建设性的评论
SELECT 
    T.c.query('.') AS MeterImportDataItem  
FROM   @XML.nodes('/MeterImportDataItems/MeterImportDataItem') T(c)