Sql server SQL Server 2005 w/out节点中的更新XML导致空错误
因此,我有一个脚本将以下节点的XML值更新/插入为True:Sql server SQL Server 2005 w/out节点中的更新XML导致空错误,sql-server,xml,sql-server-2005,sqlxml,Sql Server,Xml,Sql Server 2005,Sqlxml,因此,我有一个脚本将以下节点的XML值更新/插入为True: <Submitted>False</Submitted> 问题是并非所有行都将包含该节点,因此,它引发错误:不能对空值调用“@temp”上的Mutator“modify” 我需要做什么来过滤掉XML中不包含提交节点的行 **注意,我有所有这些疯狂的强制转换,因为列类型是文本,并且无法更改,因为客户端最初是这样设置的 DECLARE @temp XML SELECT @temp = CAST(CA
<Submitted>False</Submitted>
问题是并非所有行都将包含该节点,因此,它引发错误:不能对空值调用“@temp”上的Mutator“modify”
我需要做什么来过滤掉XML中不包含提交节点的行
**注意,我有所有这些疯狂的强制转换,因为列类型是文本,并且无法更改,因为客户端最初是这样设置的
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
在尝试更新之前,测试XML变量是否为null
if @temp is not null
begin
-- modification to local XML var
SET @temp.modify ----
-- write it back into the table as TEXT column
SET @temp.modify....
end
注意:如果有多行包含False,则此代码可能会有问题。您将拥有@temp中一行的XML,根据某些索引,可能是最后一行,但您将使用该XML更新所有False所在的行 谢谢。这是我能做的最好的,因为这个该死的列是文本和数据XML,没有办法更改列类型,这要感谢设置它的客户。我想我需要添加一个IF-EXISTS语句,现在就做我需要的。你是达曼!你能帮我拿这个吗: