gpt4 book ai didi

sql-server - SQL替换一个空的XML值

转载 作者:行者123 更新时间:2023-12-03 08:22:17 25 4
gpt4 key购买 nike

我是sql的初学者,但我不知道如何找到解决问题的方法。

我有一个带有项目的表,一列包含xml值。我想检查一个字段是否存在并更新它。

我找到了一种修改现有xml值的方法,但是当它为NULL时不起作用

有我的代码:

SELECT @xml=IDA_Xml,
@isData = IDA_Xml.exist('(/Root/Data[1]/text())[1]')
FROM DATA
WHERE IDA_UId=@guid

If (@xml is NULL)
BEGIN
-- Create a xml value with <Root></Root>
-- It will be update later
-- set isData to 0
END

IF (@isData = 0)
UPDATE ItemData SET IDA_Xml.modify
('
insert <Data Name = "Info">{sql:variable("@number")}</Data>
into (/Root/*)[1]
')
WHERE IDA_UId = @guid;
ELSE
UPDATE ItemData SET IDA_Xml.modify
('
replace value of (/Root/Data[1]/text())[1]
with sql:variable("@number")
')
WHERE IDA_UId = @guid;

最佳答案

在这种情况下,最简单的方法是在大多数情况下丢弃现有元素并将其作为新元素插入:

DECLARE @mockup TABLE(ID INT IDENTITY, Descr VARCHAR(100),YourXml XML);
INSERT INTO @mockup VALUES
('element exists','<root><element>test</element><SomeOther>blah</SomeOther></root>')
,('element doesn''t exist','<root><SomeOther>blah</SomeOther></root>')
,('element exists, but empty','<root><element/><SomeOther>blah</SomeOther></root>');

--At the end, all should be `<element>new</element>`

UPDATE @mockup SET YourXml.modify('delete (/root/element)[1]');
UPDATE @mockup SET YourXml.modify('insert <element>new</element> as first into (/root)[1]');

SELECT * FROM @mockup;

关于sql-server - SQL替换一个空的XML值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44924436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com