SQL - 使用变量定义/修改XML

时间:2017-01-27 17:35:14

标签: sql xml

我正在尝试在其中定义一个带有VARCHAR字符的XML变量......

实施例

DECLARE @number nvarchar(10);
SET @number = '10'


DECLARE @xml XML;
SET @xml = 
'
<Root>
  <Node> Hello {sql:variable("@number")} </Node>
</Root>
'

但是,问题是您只能将xml变量设置为字符串文字。有没有办法做到这一点?谢谢!

3 个答案:

答案 0 :(得分:2)

不确定为什么要这样做。使用+连接字符串中的变量,然后将其分配给xml varibale

DECLARE @number NVARCHAR(10);

SET @number = '10'

DECLARE @xml XML;

SET @xml = '
<Root>
  <Node> Hello ' + Isnull(@number,'') + ' </Node>
</Root>
' 

查看xml

select @xml

结果:

<Root>
  <Node> Hello 10 </Node>
</Root>

答案 1 :(得分:2)

DECLARE @number nvarchar(10) = '10';

DECLARE @xml XML = N'';    
SELECT @xml = @xml.query('
<Root>
  <Node>Hello {sql:variable("@number")}</Node>
</Root>
');

SELECT @xml;

/*
<Root>
  <Node>Hello 10</Node>
</Root>
*/

答案 2 :(得分:1)

在我看来,现有的答案(赞成和接受)并不是一条好路。应该(几乎)永远不会通过字符串连接创建XML ...

为什么不是简单的方法?让XML引擎努力工作!

DECLARE @number nvarchar(10);
SET @number = '10'

DECLARE @xml XML=(SELECT 'Hello ' + @number FOR XML PATH('Node'),ROOT('Root'),TYPE);

SELECT @xml;

返回

<Root>
  <Node>Hello 10</Node>
</Root>

想象一下,你的(字符串!)变量包含一些带有禁用字符的文本(><&或qoutes或许多特殊/远东/任意字符之一)......使用FOR XML ...将隐式为你做所有的逃避......

一个副作用:如果您的变量为NULL,则不会获得所有的NULL,而是一个空节点的有效XML:

<Root>
  <Node />
</Root>