【问题标题】:Get the value of each XML node and set it to a parameter获取每个 XML 节点的值并将其设置为参数
【发布时间】:2016-11-13 14:31:57
【问题描述】:

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

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

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

我需要在参数中设置节点&lt;name&gt;&lt;age&gt;的值。例如:

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

这可能吗?谢谢!

【问题讨论】:

  • 您想用存储在变量中的 XML 中的相应元素值替换多个字符串中的 &lt;name&gt;&lt;age&gt; 的任何实例...对吗?或者,您想获取 XML 中 any 元素的元素值,并替换这些字符串中出现的 any 标记吗?

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


【解决方案1】:

如果我理解正确,您将在 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] 来选择第一个节点的值,其中元素的名称类似于给定参数

【讨论】:

  • “我需要在参数中设置节点的值”,这些参数我认为他指的是@name和@987654326 @变量。我将其解读为:用 XML 中元素的值替换变量中每次出现的 &lt;name&gt;&lt;age&gt;。不过我可能是错的。
  • @TT。好吧,我不知道...您所指的句子在我看来像我想从&lt;name&gt;&lt;age&gt; 中读取值并将其改组为变量。我把这个 Set @name='get value of node ' 放在上面的方式......我们会看到:-)
  • 旁注:选择(/root/name)[1]等的值不是更容易吗?我的意思是更少的文字:)
  • @TT。你是绝对正确的......记住,节点的名称可能会被一般传入。但在这种情况下,所有节点名称都是已知的......我将编辑我的答案,谢谢!
  • @userMJ 我很高兴读到这篇文章!请给我一个提示:如果这对您有用,最好勾选验收检查(投票计数器旁边的勾勒检查符号)以将此问题标记为已解决。谢谢!
猜你喜欢
  • 2020-11-28
  • 2021-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-02
  • 1970-01-01
  • 2020-06-02
  • 1970-01-01
相关资源
最近更新 更多