在SQL Server 2008中附加XML复杂元素

时间:2013-05-24 22:35:37

标签: sql-server-2008 tsql

我无法提出可扩展的解决方案。如何在SQL Server 2008中附加复杂的XML元素?

例如,我有以下简单的表:

CREATE TABLE my_audit (
    [id] [int] IDENTITY(1,1) NOT NULL,  
    [xml_file] [xml] NULL,
 );

假设我插入以下XML文件:

<Input>
  <Element1 />
</Input>

我可以通过运行以下SQL语句附加第二个元素:

UPDATE my_audit
SET xml_file.modify('insert element Element2 {""} as last into (/Input)[1]')
WHERE id = 1;

这样可行,并产生:

<Input>
  <Element1 />
  <Element2 />
</Input>

不幸的是,对于更复杂的元素类型,这是不可扩展的。考虑附加此XML:

<Input>
  <Element3>
    <subElement1></subElement1>
  </Element3>
</Input>

现在该怎么办?

这类调用是由.net应用程序进行的,该应用程序使用ADO连接数据库(不能改变)。如果我编写自己的映射库,很快就会失控。这不是一个可扩展的解决方案。

是否有TSQL命令我可以传递VARCHAR变量“&lt; Element3&gt;&lt; subElement1&gt;&lt; / subElement1&gt;&lt; / Element3&gt;”追加?也许其他一些更好的方式?

1 个答案:

答案 0 :(得分:2)

我学会了代替硬编码元素,属性等。我可以设置另一个XML变量来处理我可能遇到的每一个奇怪的情况。

所以我的旧SQL语句:

UPDATE my_audit
SET xml_file.modify('insert element Element2 {""} as last into (/Input)[1]')
WHERE id = 1;

变为:

DECLARE @xmlAppend XML = '<Element2 />';

UPDATE my_audit
SET xml_file.modify('insert sql:variable("@xmlAppend") as last into (/Input)[1]')
WHERE id = 1;