2011-12-09 2 views
8

In che modo si impedisce a SQL Management Studio (10.50.2500.0) di aggiungerlo all'inizio di ogni stored procedure quando faccio clic con il pulsante destro del mouse/Modifica?Interrompe SQL Server Management Studio dall'aggiunta di ANSI_NULLS e QUOTED_IDENTIFIER

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

Nessuna di queste impostazioni è utile per me. ANSI_NULLS ON e QUOTED_IDENTIFIER ON sono impostati su tutti i miei server, DB e connessioni. Oltre a questo, non uso mai virgolette (ho usato parentesi per le parole riservate) e tutti i miei campi nullable uso correttamente IS NULL quando necessario.

Eliminare le impostazioni ogni volta che si modifica una procedura. Tutte le mie procedure sono correttamente impostate e non cambieranno mai nel mio ambiente. Verificato da:

SELECT uses_ansi_nulls, uses_quoted_identifier 
FROM sys.sql_modules 
WHERE object_id = object_id('proc_name') 
+4

non riesco a trovare un mezzo per fai così (ti aspetteresti che appaiano in 'Strumenti -> Opzioni -> SQL Server Object Explorer -> Scripting'), ma probabilmente non vuoi rimuoverli comunque (quale problema ti causa?) –

+0

Sì , sembra che dovrebbe essere il posto. È fastidioso. L'unico problema che mi causano è che sono inutili e sprecano spazio. Ho aggiornato la domanda per spiegare ulteriormente. – ThinkingStiff

risposta

7

Non è sicuro se questo conta come una risposta o una non-risposta inutile, ma come Damien_The_Unbeliever suggerito che assolutamente non si vuole SSMS per fermare script queste linee. Poiché si trovano nella tabella sql_modules, formano parte integrante della definizione della stored procedure, insieme al codice SQL stesso. Quindi non possono essere "disattivati" più di quanto potrebbe fare il tuo codice SQL.

Se si crea/modificare una stored procedure da una connessione che ha un diverso valore di ANSI_NULLS opzione a quello utilizzato quando la stored procedure è stato creato/definito, allora si modificare il comportamento di stored procedure che, in modo permanente!

E 'per questo motivo che SSMS (e qualsiasi strumento di oggetti script SQL semidecente) sarà sempre uscita queste righe - perché se non vengono rimossi o modificarle, si modifica la definizione della stored procedure (rimozione in particolare, è male perché significa che il comportamento della stored procedure, a seconda della connessione da cui è stato pubblicato, può variare).

Facendo una rapida ricerca su Google per "stored procedure ANSI_NULLS QUOTED_IDENTIFIER", il risultato alto è il seguente articolo che sembra spiegare le opzioni, e il loro impatto, in modo molto chiaro: http://ranjithk.com/2010/01/10/understanding-set-quoted_identifier-onoff/

+1

Se qualcuno non capiva cosa stavano facendo, forse queste sarebbero impostazioni utili. E rimuovendoli sto cambiando solo la definizione della stored procedure se il mio default è diverso da proc. Se qualcuno conosce le conseguenze delle loro azioni, dovrebbe essere in grado di rimuoverle. Le future impostazioni predefinite non potranno nemmeno essere modificate. Ho aggiornato la mia domanda per spiegarlo meglio. +1 per una buona panoramica. – ThinkingStiff

+0

@ThinkingStiff - la differenza è che le impostazioni sempre impostate tramite script vengono acquisite quando viene creata la stored procedure - sono, in un modo molto reale, parte della definizione della procedura, mentre qualsiasi altra impostazione viene valutata in fase di esecuzione, quando la procedura viene eseguito. –

+0

Sì, ho modificato il mio commento realizzando che non erano buoni esempi. – ThinkingStiff