Sql server SQL Server 2005 w/out节点中的更新XML导致空错误

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

因此,我有一个脚本将以下节点的XML值更新/插入为True:

<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语句,现在就做我需要的。你是达曼!你能帮我拿这个吗: