Подтвердить что ты не робот

Тип данных 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').

Спасибо за любую информацию, которую вы можете предоставить.

4b9b3361

Ответ 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, хотя.