【发布时间】:2011-12-07 00:29:09
【问题描述】:
所以我有一个脚本来更新/插入以下节点的 XML 值到 True:
<Submitted>False</Submitted>
问题不是所有行都包含节点,因此,它会引发错误:“不能在空值上调用 '@temp' 上的 Mutator 'modify()'。”
我需要怎么做才能过滤掉 XML 中不包含“已提交”节点的行?
**注意,我有所有这些疯狂的 CASTS,因为列类型是 TEXT 并且无法更改,因为客户端最初是这样设置的。
DECLARE @temp XML
SELECT
@temp = CAST(CAST(TicorOregon..tbl_Module_RequestForms_Items.XML AS NTEXT) AS XML)
FROM
TicorOregon..tbl_Module_RequestForms_Items
WHERE
CAST(CAST(TicorOregon..tbl_Module_RequestForms_Items.XML AS NTEXT) AS XML).value('(//Record/Submitted)[1]', 'NVARCHAR(max)') <> 'True'
-- modification to local XML var
SET
@temp.modify('replace value of (//Record/Submitted[1]/text())[1] with "True"')
-- write it back into the table as TEXT column
UPDATE
TicorOregon..tbl_Module_RequestForms_Items
SET
XML = CAST(CAST(@temp AS VARCHAR(MAX)) AS TEXT)
WHERE
CAST(CAST(TicorOregon..tbl_Module_RequestForms_Items.XML AS NTEXT) AS XML).value('(//Record/Submitted)[1]', 'NVARCHAR(max)') <> 'True'
AND CAST(CAST(TicorOregon..tbl_Module_RequestForms_Items.XML AS NTEXT) AS XML).value('(//Record/Submitted)[1]', 'NVARCHAR(max)') <> null
【问题讨论】:
-
谢谢。这是我能做的最好的,这个该死的列是 TEXT 和数据 XML 没有办法改变列类型感谢设置它的客户。
-
我认为我需要添加一个 IF EXISTS 语句,现在正在处理这个
标签: sql-server xml sql-server-2005 sqlxml