所以我有一個腳本來更新/插入以下節點的XML值設置爲True:更新XML在SQL Server 2005瓦特/輸出節點會導致空錯誤
<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語句,現在正在處理這個 –