Тип данных XML SQL Server и QUOTED_IDENTIFIER - PullRequest
12 голосов
/ 22 июля 2010

Кто-нибудь может дать представление об этом?

Я разработал процесс импорта с использованием типа данных 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 Ответ

17 голосов
/ 22 июля 2010

Очень простой тестовый пример

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)

Придает

Сообщение 1934 г., уровень 16, состояние 1, строка 8 ВЫБРАТЬ не удалось, потому что следующее Параметры SET имеют неверные настройки: 'QUOTED_IDENTIFIER. Убедитесь, что SET варианты правильны для использования с индексированные представления и / или индексы на вычисляемые столбцы и / или запрос уведомления и / или тип данных xml методы.

Это задокументировано попутно здесь

Выполнение данных XQuery и XML заявление о модификации требует, чтобы вариант подключения QUOTED_IDENTIFIER включен.

Я не видел причину, почему это требование для xQuery.

...