Условное изменение XML в SQL Server - PullRequest
0 голосов
/ 27 декабря 2018

Возможно ли использовать XML.modify внутри оператора case, подобного этому, или это должны быть 2 отдельных оператора обновления?

UPDATE s
SET     
   CASE WHEN [XMLData] IS NOT NULL THEN [XMLData].modify('delete //invoice/account/contactinformation') END,
   CASE WHEN [SummaryXMLData] IS NOT NULL THEN [SummaryXMLData].modify('delete //invoice/account/contactinformation') END 
FROM   
    ITS_CSC.[Statement].[StatementSummary] s    

SQL Server выдает эту ошибку:

Сообщение 156, Уровень 15, Состояние 1, Строка 34
Неверный синтаксис рядом с ключевым словом "CASE".

Примечание: вызов метода modify непосредственно для значения NULL завершается неудачносо следующим сообщением, следовательно, необходимо проверить NULL s

Mutator 'modify ()' в 'имя столбца' не может быть вызван для нулевого значения.

1 Ответ

0 голосов
/ 27 декабря 2018

Это неверный синтаксис.Вместо этого вы можете использовать 2 отдельных оператора:

UPDATE ITS_CSC.[Statement].[StatementSummary]
SET  [XMLData].modify('delete //invoice/account/contactinformation') 
WHERE [XMLData] IS NOT NULL;

UPDATE ITS_CSC.[Statement].[StatementSummary]
SET [SummaryXMLData].modify('delete //invoice/account/contactinformation')
WHERE [SummaryXMLData] IS NOT NULL;
...