Тип данных SQL Server XML и QUOTED_IDENTIFIER
Может ли кто-нибудь объяснить это?
Я разработал процесс импорта с использованием типа данных XML. После того, как данные вставляются в таблицу с помощью импорта sProc, я запускаю другие процедуры для обновления другой таблицы с импортированной таблицей.
Процедура обновления генерирует исключение, если оно создано с SET QUOTED_IDENTIFIER OFF. Я хотел бы понять, почему это происходит.
Здесь код:
DECLARE @xmlRecords XML
SET @xmlRecords = (SELECT importedXML FROM importTable WHERE importId = @lastImportId)
UPDATE o
SET o.ReferralCode = import.refCode
FROM (
SELECT records.record.value('(@orderId)[1]', 'INT') AS orderId,
records.record.value('(@refCode)[1]', 'VARCHAR(15)') AS refCode
FROM @xmlRecords.nodes('/records/record') records(record)
) import
INNER JOIN tblOrder o ON import.OrderId = o.orderId
Я предполагаю, что это связано с цитируемыми типами данных ('VARCHAR (15)') или элементами пути запроса xml ('/records/record').
Спасибо за любую информацию, которую вы можете предоставить.
Ответы
Ответ 1
Очень простой тестовый пример
set quoted_identifier off
DECLARE @xmlRecords XML
SET @xmlRecords = '<records><record orderId="1" refCode="1234"></record></records>'
SELECT records.record.value('(@orderId)[1]', 'INT') AS orderId
FROM @xmlRecords.nodes('/records/record') records(record)
дает
Msg 1934, уровень 16, состояние 1, строка 8 SELECT не удалось, поскольку следующее Параметры SET имеют неправильные настройки: 'QUOTED_IDENTIFIER. Убедитесь, что SET варианты правильны для использования с индексированные представления и/или индексы на вычисляемые столбцы и/или запрос уведомления и/или тип данных xml Методы.
Это задокументировано здесь
Выполнение XQuery и XML-данных модификации требует, чтобы вариант подключения QUOTED_IDENTIFIER будет включен.
Я не видел причины, почему это требование для xQuery, хотя.