我正在尝试在sql server上更新我的Xml字符串中的空XML标记; 它表示当我运行以下脚本时更新行,但是当我查看XML时; 什么也没有变:
Declare @newValue varchar(100)
select @newValue = '01'
update dbo.UploadReport
set XmlTest.insert('replace value of (/CodeFiveReport/Owner/AgencyID/text())[1] with sql:variable("@newValue")')
where id = 'myId'
Run Code Online (Sandbox Code Playgroud)
在数据库中仍然显示为xml
<AgencyID />
我究竟做错了什么?
我在最后没有文本()的情况下尝试了@AgencyID,仍然无济于事......
小智 13
使用Sql Server 2005
declare @var varchar(100)
set @var = '1234'
Run Code Online (Sandbox Code Playgroud)
- 将空格插入空元素
update dbo.UploadReport
set Form_XML.modify('insert text{" "} into (/CodeFiveReport/Owner/AgencyID/[not(text())])[1]')
WHERE id = 'myId'
Run Code Online (Sandbox Code Playgroud)
- 现在我们有了一个text()节点,你可以使用替换w /你的变量
update dbo.UploadReport
set FORM_XML.modify('replace value of (/CodeFiveReport/Owner/AgencyID/text())[1] with sql:variable("@var")')
WHERE id = 'myId'
Run Code Online (Sandbox Code Playgroud)
mar*_*c_s 11
据我所知,根据我自己的经验,你不能一步到位,因为<AgencyID/>元素真的没有text()- 所以你不能替换它.
您可能必须使用以下内容:
DECLARE @newValue VARCHAR(100)
SELECT @newValue = '01'
-- first update - add a new <AgencyID>...</AgencyID> node
UPDATE dbo.UploadReport
SET XmlTest.modify('insert <AgencyID>{sql:variable("@newValue")}</AgencyID> as last into (/CodeFiveReport/Owner)[1]')
WHERE id = 'myId'
-- second update - remove the empty <AgencyID /> node
UPDATE dbo.UploadReport
SET XmlTest.modify('delete (/CodeFiveReport/Owner/AgencyID)[1]')
WHERE id = 'myId'
Run Code Online (Sandbox Code Playgroud)
一件事:你需要使用这个XmlTest.modify操作 - 而不是XmlTest.insert你的帖子..insert()SQL Server XML列上没有任何功能.
小智 5
直接将值更新为空元素应该是这样的:-
update dbo.UploadReport
set Form_XML.modify('insert text{sql:variable("@var")} into (/CodeFiveReport/Owner/AgencyID)[1]')
WHERE id = 'myId'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11116 次 |
| 最近记录: |