tsql – 如何在T-SQL中遍历XML字段的节点?

前端之家收集整理的这篇文章主要介绍了tsql – 如何在T-SQL中遍历XML字段的节点?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个XML字段,我知道其中至少有一个“ChildNode”,但可能更多.我试图在T-sql中创建一个循环,它将每个ChildNode的XML作为VarChar(1000)并使用它做一些逻辑.当我尝试以下…
...
SET @intIterator=1 

SET @strValue = (SELECT XMLField.value('(/RootNode/ParentNode/ChildNode)[' + CAST(@intIterator AS VARCHAR(2)) + ']',VARCHAR(1000)) WHERE PrimaryKeyField=@intID)

WHILE LEN(@strValue) > 0
   BEGIN

      --LOGIC with @strValue not shown.
      @intIterator = @intIterator + 1
      @strValue = (SELECT XMLField.value('(/RootNode/ParentNode/ChildNode)[' + CAST(@intIterator AS VARCHAR(2)) + ']',VARCHAR(1000)) WHERE PrimaryKeyField=@intID)

   END

我收到以下错误
xml数据类型方法“value”的参数1必须是字符串文字.

我知道当我尝试在值方法中使用@intIterator时它正在爆炸,因为它需要字符串文字而不是变量,但是如何在T-sql中逐个遍历子节点?

解决方法

我不知道你的XML是什么样的,但你可能不得不使用不同的方法 – 不要尝试迭代和循环这样的东西 – 而是使用XQuery中的.nodes()函数
SELECT 
    Child.value('(SomeElement)[1]','int'),Child.value('(SomeOtherElement)[1]','Varchar(50)')
FROM
    XMLField.nodes("/RootNode/ParentNode/ChildNode") AS N(Child)

这基本上留下了迭代/循环到XQuery,你不必乱用索引或任何类似的东西……

猜你在找的MsSQL相关文章