1

我无法提出可扩展的解决方案。如何在 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>

现在我该怎么办?

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

是否有一个 TSQL 命令我可以传递一个 VARCHAR 变量“<Element3><subElement1></subElement1></Element3>”来追加?也许其他更好的方法?

4

1 回答 1

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;
于 2013-05-30T15:23:10.167 回答