我无法提出可扩展的解决方案。如何在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;”追加?也许其他一些更好的方式?
答案 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;