Общие сведения о QUOTED_IDENTIFIER

Мы только что столкнулись с проблемой, когда один из наших сохраненных процессов выдает ошибку;

SELECT failed because the following SET options have incorrect settings: 'QUOTED_IDENTIFIER'

Я исправил это, изменив сохраненная процедура и установка цитируемого идентификатора в положение ON. Дело в том, что я сделал это до вызова CREATE PROCEDURE. Например:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[InsertStuff]

Я бы подумал, что это повлияет на оператор CREATE PROCEDURE, но не повлияет ни на что, связанное с выполнением этой процедуры.

Все наши сценарии развертываются как сценарии drop and create и запускаются через sqlcmd.Я только что прочитал здесь (ищите Пример: Выполнение SQLCMD) и здесь , которые sqlcmd выполняет с идентификатором в кавычках, отключенным . Я изменил наш сценарий, включив переключатель -I, чтобы посмотреть, решит ли это наши проблемы.

Мои вопросы:

1) Влияет ли оператор SET QUOTED_IDENTIFIER ON только на оператор DDL CREATE PROCEDURE, или он также влияет на выполнение хранимой процедуры? Мой быстрый тест указывает на последнее.

2) Поскольку по умолчанию этот переключатель включен, я предполагаю, что установка переключателя -I в моем запросе sqlcmd не окажет отрицательного воздействия. Для всех намерений и целей я предполагаю, что это то же самое, что копировать содержимое скрипта, а затем вставлять его в диспетчер запросов и нажимать «Выполнить». Пожалуйста, поправьте меня, если я ошибаюсь. Наш простой сценарий развертывания выглядит следующим образом:

@echo off

SET dbodir=../Schema Objects/Schemas/dbo/Programmability/Stored Procedures/
SET tpmdir=../Schema Objects/Schemas/TPM/Programmability/Stored Procedures/

echo --- Starting dbo schema

for %%f in ("%dbodir%*.sql") do (echo Running %%f.... && @sqlcmd -I -U %1 -P %2 -S %3 -d %4 -i "%dbodir%%%f")

echo --- Completed dbo schema

echo --- Starting TPM schema

for %%g in ("%tpmdir%*.sql") do (echo Running %%g.... && @sqlcmd -I -U %1 -P %2 -S %3 -d %4 -i "%tpmdir%%%g")

echo --- Completed TPM schema

pause

Заранее спасибо

Изменить:

Похоже, есть дополнительная информация , чтобы определить, где хранятся параметры SET для сохраненных процессов, и принятый ответ на это содержит некоторые подробности об общих правилах, касающихся общего порядка приоритета, который применяется к параметрам SET. В комментариях к этому также говорится, что:

"... Во время создания процедуры фиксируются только параметры QUOTED_IDENTIFER и ANSI_NULLS." "... SET QUOTED IDENTIFIER не может быть установлен во время выполнения внутри хранимой процедуры »(выделено мной).

Я чувствую, что это отвечает на мой первый вопрос.

Есть любители второй части?

10
задан Community 23 May 2017 в 11:52
поделиться