Sql XML数据类型方法“modify”的使用不正确。在这种情况下,需要一个非mutator方法

Sql XML数据类型方法“modify”的使用不正确。在这种情况下,需要一个非mutator方法,sql,sql-server,xml,Sql,Sql Server,Xml,我正在尝试根据案例更新表中的XML数据列。下面是我的代码: UPDATE #temp SET xml_data = CASE WHEN @type = 'G' THEN xml_data.modify('insert <type>G</type> after (/Main/name)[1]'); WHEN @type = 'Q'

我正在尝试根据案例更新表中的XML数据列。下面是我的代码:

UPDATE #temp
SET xml_data = CASE
                  WHEN @type = 'G' 
                     THEN xml_data.modify('insert <type>G</type> after (/Main/name)[1]');
                  WHEN @type = 'Q' 
                     THEN xml_data.modify('insert <type>Q</type> after (/Main/name)[1]'); 
               END
有人帮忙吗

更新:

我编辑的查询:

UPDATE #temp
SET xml_data.modify('insert <Type>{sql:variable("@var")}</Type> after (/Main/name)[1]')
此查询正在将类型添加到XML的末尾。输出:

<Main>
    <name>John doe</name>
    <age>15</age>
</Main>
<Type>Q</Type>
试试这个:

UPDATE #temp
   SET xml_data = 'insert <type>' + @type + '</type> into (/Main)[1]'
样本:

DECLARE @myXML XML = 
N'<Main>
    <name>John doe</name>    
    <age>15</age>
  </Main>'  ;       

SET @myXML.modify('insert <type>Q</type> into (/Main)[1]') ;  

SELECT @myXML; 
语法设置为[xml\u column]。修改,不使用赋值。不要使用CASE,而是使用特殊的sql:variable函数将变量折叠到更新中:

更新温度 设置xml_数据。修改'insert{sql:variable@type}在/Main/name[1]之后;
好答案+1来自我这边!里克在评论中把这个问题作为后续问题,我给出了完全相同的建议-汉克斯先生!我的参数把一切都搞乱了,但我已经解决了:D谢谢@Shnugo:我面临着一个与此更新相关的问题,我正在提出一个新问题,提到我的场景。如果你能帮我解决,那就太好了!这有什么帮助?我想说这是完全错误的,但可能是我不明白要点…您编辑的查询更新部分永远不会创建您在最后声明的结果。。。类型!=类型xml严格区分大小写…很好地抓住了Shnugo。但在复制粘贴我的输出时,我编辑了它,。现在我将编辑我的问题并粘贴我得到的实际输出Rick,我很确定,还有其他东西。。。可能是您检查了错误的XML,可能是这个Q在您以前的一次尝试中被持续修改了,您只是认为这是在这个语句中引入的。after/Main/name[1]将把这个新节点放在指定的位置……Rick,在您插入/Main[1]的过程中,我很确定您在开始时没有对after进行任何更改-
DECLARE @myXML XML = 
N'<Main>
    <name>John doe</name>    
    <age>15</age>
  </Main>'  ;       

SET @myXML.modify('insert <type>Q</type> into (/Main)[1]') ;  

SELECT @myXML;