我有一个 qbo3 语句,我想在其中修改 ImportForm.XmlData 中的值。
例如,我在
XmlData
中有以下数据:
<ImportFormXml>
<Foo>Bar</Foo>
</ImportFormXml>
我希望能够:
Foo
NewField
,并且OldField
这可以通过 TSQL 完成(在 qbo3 语句中)吗?
鉴于
ImportForm.XmlData
:
<ImportFormXml>
<Foo>Bar</Foo>
</ImportFormXml>
您可以使用 TSQL
modify
子句,如下所示:
DECLARE @ID int = 1
-- Add a new key/value pair
UPDATE ImportForm
SET XmlData.modify('
insert <NewField>NewValue</NewField>
into (/ImportFormXml)[1]
')
WHERE ImportFormID = @ID
-- Update a key to a new value
UPDATE ImportForm
SET XmlData.modify('replace value of (/ImportFormXml/Foo/text())[1] with "Baz"')
WHERE
ImportFormID = 2
AND XmlData.exist('(/ImportFormXml/Foo)[1]') = 1;
-- Delete an existing key
UPDATE ImportForm
SET XmlData.modify('delete /ImportFormXml/OldField')
WHERE
ImportFormID = @ID
AND XmlData.exist('(/ImportFormXml/OldField)[1]') = 1;
请注意,使用此技术只能操作每个
UPDATE
子句的单个 Xml 节点字段。