我想获取XML数据并将每个节点值插入表的一行中。例如,我有:
<Tags>
<Tag>a</Tag>
<Tag>b</Tag>
<Tag>c</Tag>
</Tags>
我想在名为的表中插入a,b和c Tags
。我应该怎么做?
到目前为止,我已经有了这段代码,但是我不知道如何@I
在xquery部分中进行定义。顺便问一下,有没有更简单的方法?
CREATE TABLE #T (tag nvarchar(100))
DECLARE @TagsXML xml
DECLARE @TagsCount int
DECLARE @I int = 0
SET @TagsXML = '<Tags><Tag>a</Tag><Tag>b</Tag><Tag>c</Tag></Tags>'
SET @TagsCount = (SELECT T.x.value('count(Tag)', 'nvarchar(100)') FROM @TagsXML.nodes('Tags') T(x))
WHILE @I < @TagsCount
BEGIN
INSERT INTO #T VALUES ((SELECT T.x.value('concat("Tag[", @I, "]")', 'nvarchar(100)') FROM @TagsXML.nodes('Tags') T(x)))
SET @I = @I + 1
END
SELECT * FROM #T
不要使用WHILE
循环-集中思考!
您可以在一条语句中轻松完成此操作:
INSERT INTO #T(tag)
SELECT
XTags.value('.', 'nvarchar(100)')
FROM
@TagsXML.nodes('/Tags/Tag') AS XTbl(XTags)
的调用.nodes()
提供了与该XPath表达式匹配的XML标记的列表(作为XML片段)-在这里,您将获得所有<tag>
元素的列表。从XML片段列表中,我选择唯一元素的内容nvarchar(100)
,并将其插入表中。与带WHILE
循环的RBAR(逐行行)方法相比,效率更高,性能更好得多
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句