获取每个XML节点的值并将其设置为参数

时间:2016-11-13 14:31:57

标签: sql-server xml sql-server-2008

如何使用SQL Server 2008在每个XML节点中设置参数?

我是SQL的新手,我有像这样的XML数据

Set @xml='<root><name>John </name><age>8</age></root>'

我需要在参数中设置节点<name><age>的值。例如:

Set @name='get value of node <name>'
Set @age='the value of <age>'

这可能吗?谢谢!

1 个答案:

答案 0 :(得分:2)

如果我得到正确的结果,您将在XML中获取参数 key-value-pairs 。您尝试实现的是将值读入拟合变量。试试这样:

DECLARE @xml XML;
SET @xml='<root><name>John </name><age>8</age></root>';

DECLARE @name NVARCHAR(100);
DECLARE @age INT;

SET @name=@xml.value('(/root/name)[1]','nvarchar(max)');
SET @age =@xml.value('(/root/age)[1]','int');

SELECT @name,@age;

如果您需要查询变量名称中的值,可以使用:

DECLARE @nodeName NVARCHAR(100)='name';
SET @name=@xml.value('(/root/*[local-name()=sql:variable("@nodeName")])[1]','nvarchar(max)');

中心思想是使用XQuery - 表达式(/root/*[local-name()=sql:variable("@nodeName")])[1]来选择第一个节点的值,其中元素的名称就像给定的参数< / em>