Обновление XML в SQL Server 2005 без узла вызывает нулевую ошибку
Итак, у меня есть скрипт для обновления / вставки значения XML следующего узла в True:
<Submitted>False</Submitted>
Проблема состоит не в том, что все строки будут содержать узел, и из-за этого он выдает ошибку: "Mutator 'modify()' в" @temp "не может быть вызван для нулевого значения".
Что мне нужно сделать, чтобы отфильтровать строки, которые не содержат "отправленный" узел в 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
1 ответ
Проверьте вашу переменную XML на ноль, прежде чем пытаться обновить.
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
Примечание: у вас могут возникнуть проблемы с этим кодом, если имеется более одной строки <Submitted>False</Submitted>
, Вы будете иметь XML из одной строки в @temp
(вероятно, последний по некоторому индексу), но вы обновите все строки, где <Submitted>False</Submitted>
с этим XML.