Verständnis QUOTED_IDENTIFIER

Wir lief in ein problem mit einem unserer stored procs auslösen eines Fehlers;

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

Ich es behoben, indem Sie die gespeicherte Prozedur und die Einstellung der quoted identifier AUF on. Die Sache ist die, ich habe diese vor der CREATE PROCEDURE-call. Zum Beispiel;

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[InsertStuff]

Hätte ich gedacht, dass dies beeinflusste die CREATE PROCEDURE-Anweisung, aber würde nicht betroffen haben nichts zu tun mit der Ausführung der Prozedur.

Unseren Skripten sind alle bereitgestellt, die als drop-und create-Skripten und laufen über sqlcmd. Ich habe gerade gelesen, dass hier (Suche Beispiel: Ausführen von SQLCMD) und hier, dass sqlcmd ausgeführt, mit Bezeichner aus. Ich habe mich verändert unser Skript so, dass es den -I-Schalter, um zu sehen, ob das behebt unsere Probleme.

Meine Fragen sind dann;

1) Hat die SET QUOTED_IDENTIFIER ON-Anweisung wirkt sich nur auf die DDL-Anweisung CREATE PROCEDURE oder kommt es auch auf die Ausführung der stored proc auch? Mein kurzer test zeigt die letzteren.

2) Als Standardeinstellung für diesen Schalter ist AN, ich bin davon ausgegangen, dass durch mich die Einstellung der -I Schalter meiner sqlcmd-query haben keine negativen Auswirkungen. Für alle Absichten und Zwecke, ich nehme an, es ist das gleiche wie das kopieren Sie den Inhalt des Skripts und dann fügen Sie Sie in den Abfrage-manager, und drücken Sie execute. Bitte korrigieren Sie mich wenn ich bin falsch über diese. Unsere einfache Bereitstellung-Skript ist wie folgt;

@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

Vielen Dank im Voraus

Edit:

Es scheint, als gäbe es einige weitere Infos, um zu bestimmen, wo die SET-Optionen für gespeicherte Prozeduren gespeichert sind, und die akzeptierte Antwort auf diese bietet einige details, auf die Allgemeinen Regeln über generische Reihenfolge der Priorität, das gilt für die SET-Optionen. Die Kommentare zu diesem Zustand auch, dass;

" ...Nur QUOTED_IDENTIFER und ANSI_NULLS-Einstellungen erfasst werden, in Verfahren die Schöpfung der Zeit."
"...SETZEN Sie den BEZEICHNER in Anführungszeichen kann nicht zur Laufzeit festgelegt werden innerhalb der stored proc" (meine Betonung).

Ich das Gefühl, dass beantwortet meine erste Frage.

Irgendwelche Abnehmer für den zweiten Teil?

InformationsquelleAutor Mr Moose | 2011-09-20
Schreibe einen Kommentar