2013-04-17 27 views
2

accorgind的话题SQL Server XML modify with no result而之前插入新节点出现错误SQL Server中的XML处理 - 只有非文档节点可以插入

XQuery [modify()]: Only non-document nodes can be inserted. Found "xs:string ?". 

新节点的身体:

<formant id="'+lower(newid())+'" name="_name" width="155" height="20" x="125" y="761" 
     tabindex="0" source-name="_sn" readonly="false" required="false" 
     font="_fnt"><value></value></formant> 

任何想法如何解决它?

DECLARE @newNodeData varchar(max) = <formant id="'+lower(newid())+'" name="_name" width="155" height="20" x="125" y="761" 
            tabindex="0" source-name="_sn" readonly="false" required="false" 
            font="_fnt"><value></value></formant> 

...在@newNodeData变量一些文字修改

然后

declare @xml xml; 

select @xml = t.xmlData //t.xmlData is ntext type 
from table t 
where id=123 

set @xml.modify('declare namespace xsd="http://www.cebip.pl/xml/schematy/formularze/v1.0/definicja-formularza.xsd"; insert sql:variable("@newNodeData") as first into (/xsd:form-definition/xsd:page)[1]') 

update table 
set xmlData = @newNodeData 
where id=123 
+0

给出你想要做的确切的SQL – muhmud

回答

6

如果你想要做文字修改,做这些对varchar(max),但随后将结果存储在您随后使用的最终XML变量modify()

DECLARE @newNodeDataTmp varchar(max) = '<formant id="'+lower(newid())+'" name="_name" width="155" height="20" x="125" y="761" 
            tabindex="0" source-name="_sn" readonly="false" required="false" 
            font="_fnt"><value></value></formant>' 

-- Modifications 

declare @newNodeData xml = cast(@newNodeDataTmp as xml) 

您在modify()中使用的变量将需要为XML类型。

相关问题