Обновление XML в SQL Server 2005 без узла вызывает нулевую ошибку - PullRequest
0 голосов
/ 07 декабря 2011

Итак, у меня есть скрипт для обновления / вставки значения XML следующего узла в True:

<Submitted>False</Submitted>

Проблема заключается не в том, что все строки будут содержать узел, и из-за этого выдается ошибка: «Mutator 'modify ()' в« @temp »не может быть вызван для нулевого значения».

Что мне нужно сделать, чтобы отфильтровать строки, которые не содержат «отправленный» узел в 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

1 Ответ

1 голос
/ 07 декабря 2011

Проверьте переменную 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.

...