Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 在SQLServer2008中追加XML复杂元素_Sql Server 2008_Tsql - Fatal编程技术网

Sql server 2008 在SQLServer2008中追加XML复杂元素

Sql server 2008 在SQLServer2008中追加XML复杂元素,sql-server-2008,tsql,Sql Server 2008,Tsql,我很难想出一个可扩展的解决方案。如何在SQLServer2008中附加复杂的XML元素 例如,我有以下简单的表格: CREATE TABLE my_audit ( [id] [int] IDENTITY(1,1) NOT NULL, [xml_file] [xml] NULL, ); 假设我插入以下XML文件: <Input> <Element1 /> </Input> 这是有效的,并导致: <Input> <

我很难想出一个可扩展的解决方案。如何在SQLServer2008中附加复杂的XML元素

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

CREATE TABLE my_audit (
    [id] [int] IDENTITY(1,1) NOT NULL,  
    [xml_file] [xml] NULL,
 );
假设我插入以下XML文件:

<Input>
  <Element1 />
</Input>
这是有效的,并导致:

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

不幸的是,对于更复杂的元素类型,这是不可伸缩的。考虑添加此XML:

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

现在我该怎么办

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


是否有一个TSQL命令,我可以只传递一个VARCHAR变量“”进行追加?也许还有其他更好的方法?

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

因此,我的旧SQL语句:

UPDATE my_audit
SET xml_file.modify('insert element Element2 {""} as last into (/Input)[1]')
WHERE id = 1;
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;
DECLARE@xmlpappend-XML='';
更新我的审计
将xml_file.modify('insert sql:variable(@xmlpappend))设置为(/Input)[1]'中的最后一个
其中id=1;