簡體   English   中英

將XML節點插入SQL Server中的表

[英]Insert XML nodes into a table in SQL Server

我想獲取XML數據並將每個節點值插入表的一行中。 例如,我有:

<Tags> 
    <Tag>a</Tag> 
    <Tag>b</Tag> 
    <Tag>c</Tag>
</Tags>

我想在名為Tags的表中插入a,b和c。 我應該怎么做?

到目前為止,我已經有了這段代碼,但是我不知道如何在xquery部分中定義@I 順便問一下,有沒有更簡單的方法?

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(逐行掃描)方法相比,效率更高,性能更好得多

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM