qbo3 从 TSQL 更新 XmlData

问题描述 投票:0回答:1

我有一个 qbo3 语句,我想在其中修改 ImportForm.XmlData 中的值。

例如,我在

XmlData
中有以下数据:

<ImportFormXml>
  <Foo>Bar</Foo>
</ImportFormXml>

我希望能够:

  • 修改
    Foo
  • 添加一个节点
    NewField
    ,并且
  • 删除节点
    OldField

这可以通过 TSQL 完成(在 qbo3 语句中)吗?

sqlxml qbo3
1个回答
0
投票

鉴于

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 节点字段。

© www.soinside.com 2019 - 2024. All rights reserved.