tsql – 如何在T-SQL中遍历XML字段的节点?
发布时间:2020-12-12 16:22:43 所属栏目:MsSql教程 来源:网络整理
导读:我有一个XML字段,我知道其中至少有一个“ChildNode”,但可能更多.我试图在T-SQL中创建一个循环,它将每个ChildNode的XML作为VarChar(1000)并使用它做一些逻辑.当我尝试以下… ...SET @intIterator=1 SET @strValue = (SELECT XMLField.value('(/RootNode/Paren
我有一个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 我收到以下错误: 我知道当我尝试在值方法中使用@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,你不必乱用索引或任何类似的东西…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |