2

新しいノードを挿入する前にエラーが発生する間、結果のない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
4

1 に答える 1

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 タイプである必要があります。

于 2013-04-17T13:06:59.833 に答える