La compréhension QUOTED_IDENTIFIER

Nous avons juste rencontré un problème avec un de nos stockées envisageable de lancer une erreur;

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

Je l'ai fixée par modifiying la procédure stockée et réglage de l'identificateur entre guillemets. La chose est, je l'ai fait avant la création de la PROCÉDURE d'appel. Par exemple;

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[InsertStuff]

J'aurais pensé que cela a nui à la création de la PROCÉDURE de déclaration, mais n'a pas affecté quelque chose à voir avec l'exécution de cette procédure.

Nos scripts sont déployés comme de chute et de créer des scripts et de l'exécuter via sqlcmd. Je viens de lire que ici (recherche par Exemple: l'Exécution de l'utilitaire SQLCMD) et ici que sqlcmd exécute avec identificateur entre guillemets hors. J'ai modifié le script pour inclure l'-je le changer pour voir si cela résout nos problèmes.

Mes questions sont ensuite;

1) le SET QUOTED_IDENTIFIER SUR la déclaration n'affectent que le DDL instruction CREATE PROCEDURE, ou faut-il également influer sur l'exécution de la procédure stockée? Mon test rapide indique ce dernier.

2) Comme valeur par défaut de ce paramètre est SUR, je suis en supposant que par moi réglage de la -I le commutateur de ma sqlcmd requête n'aura pas d'effets négatifs. Pour toutes fins utiles, je suppose que c'est la même chose que de copier le contenu du script, puis les coller dans le gestionnaire de requête et de frapper exécuter. S'il vous plaît corrigez-moi si je me trompe à ce sujet. Notre simple script de déploiement est comme suit;

@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

Merci d'avance

Edit:

Il semble qu'il y a quelque plus d'info pour déterminer où le DÉFINIR des options pour les procs sont stockées, et l'on a accepté de répondre à cette donne quelques détails sur les règles générales concernant les génériques ordre de priorité qui s'applique à l'ENSEMBLE des options. Les commentaires sur cette affirment également qu';

" ...QUOTED_IDENTIFER et ANSI_NULLS sont capturées au moment de la création de la procédure."
"...ENSEMBLE IDENTIFICATEUR entre guillemets ne peut pas être réglé au moment de l'exécution à l'intérieur de la procédure stockée" (mon emphase).

Je sens que ça répond à ma première question.

Tout preneurs pour la deuxième partie?

OriginalL'auteur Mr Moose | 2011-09-20