在 XML 列中编辑单个条目的最简单方法?

Mik*_*ail 9 xml sql-server sql-server-2012

据我了解,MS SQL Server Management Studio 不允许通过 GUI 直接编辑/替换 XML 列中的条目(复制/粘贴不起作用等)。

替换 XML 列中单个条目的最简单选项是什么?对于 XML 列值,我是否必须使用与 UPDATE/REPLACE 不同的东西?

wBo*_*Bob 24

如果您只需要一次性替换整个 XML,那么您可以执行正常的 UPDATE,例如:

UPDATE yourTable
SET yourXML = '<yourNewValidXML/>' 
WHERE rowId = 1
Run Code Online (Sandbox Code Playgroud)

如果需要编辑单个属性或元素,则可以使用 SQL Server 中 XML 数据类型的 .modify 方法来更新单个值。这是一个让您入门的简单示例:

DECLARE @t TABLE ( rowId INT IDENTITY PRIMARY KEY, yourXML XML )

INSERT INTO @t ( yourXML )
VALUES ( '<Users>
    <User Name="Bob"></User>
    <User Name="Mikhail"></User>
    <User Name="John"></User>
    <User Name="Sue"></User>
</Users>' )

SELECT 'before' s, DATALENGTH(yourXML) dl, yourXML
FROM @t
WHERE rowId = 1

-- Update one attribute
UPDATE @t
SET yourXML.modify('replace value of (Users/User/@Name[.="Bob"])[1] with "wBob"')
WHERE rowId = 1

SELECT 'after' s, DATALENGTH(yourXML) dl, yourXML
FROM @t
WHERE rowId = 1
Run Code Online (Sandbox Code Playgroud)

如果您需要更多帮助,请发布您的 XML 和预期结果的小样本。