Condividi tramite


Istruzioni SET (Transact-SQL)

Il linguaggio di programmazione Transact-SQL offre varie istruzioni SET per la modifica della gestione delle informazioni specifiche della sessione corrente. Le istruzioni SET sono raggruppate in categorie, descritte nella tabella seguente.

Per informazioni sull'impostazione delle variabili locali mediante l'istruzione SET, vedere SET @local\_variable (Transact-SQL).

Categoria

Istruzioni

Istruzioni relative a data e ora

SET DATEFIRST

SET DATEFORMAT

Istruzioni di blocco

SET DEADLOCK_PRIORITY

SET LOCK_TIMEOUT

Istruzioni varie

SET CONCAT_NULL_YIELDS_NULL

SET CURSOR_CLOSE_ON_COMMIT

SET FIPS_FLAGGER

SET IDENTITY_INSERT

SET LANGUAGE

SET OFFSETS

SET QUOTED_IDENTIFIER

Istruzioni per l'esecuzione di query

SET ARITHABORT

SET ARITHIGNORE

SET FMTONLY

Nota

Questa funzionalità verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.

SET NOCOUNT

SET NOEXEC

SET NUMERIC_ROUNDABORT

SET PARSEONLY

SET QUERY_GOVERNOR_COST_LIMIT

SET ROWCOUNT

SET TEXTSIZE

Istruzioni per impostazioni ISO

SET ANSI_DEFAULTS

SET ANSI_NULL_DFLT_OFF

SET ANSI_NULL_DFLT_ON

SET ANSI_NULLS

SET ANSI_PADDING

SET ANSI_WARNINGS

Istruzioni statistiche

SET FORCEPLAN

SET SHOWPLAN_ALL

SET SHOWPLAN_TEXT

SET SHOWPLAN_XML

SET STATISTICS IO

SET STATISTICS XML

SET STATISTICS PROFILE

SET STATISTICS TIME

Istruzioni per transazioni

SET IMPLICIT_TRANSACTIONS

SET REMOTE_PROC_TRANSACTIONS

SET TRANSACTION ISOLATION LEVEL

SET XACT_ABORT

Considerazioni sull'utilizzo delle istruzioni SET

  • Tutte le istruzioni SET vengono implementate in fase di esecuzione, ad eccezione di SET FIPS_FLAGGER, SET OFFSETS, SET PARSEONLY e SET QUOTED_IDENTIFIER, che vengono implementate in fase di analisi.

  • Se un'istruzione SET viene eseguita in una stored procedure o in un trigger, il valore dell'opzione SET viene ripristinato al termine della stored procedure o del trigger. Se, inoltre, un'istruzione SET viene specificata in una stringa SQL dinamica che viene eseguita mediante sp_executesql o EXECUTE, il valore dell'opzione SET viene ripristinato al termine del batch specificato nella stringa SQL dinamica.

  • Le stored procedure vengono eseguite con le impostazioni SET specificate in fase di esecuzione, ad eccezione di SET ANSI_NULLS e SET QUOTED_IDENTIFIER. Le stored procedure che specificano SET ANSI_NULLS o SET QUOTED_IDENTIFIER utilizzano l'impostazione specificata in fase di creazione della stored procedure. Se utilizzate all'interno di una stored procedure, le impostazioni SET vengono ignorate.

  • L'impostazione user options di sp_configure consente di specificare opzioni a livello di server e ha effetto su più database. Questa impostazione si comporta, inoltre, come un'istruzione SET esplicita, con la sola differenza che viene applicata al momento dell'accesso.

  • Le impostazioni di database impostate tramite ALTER DATABASE sono valide solo a livello di database e hanno effetto solo se impostate in modo esplicito. Le impostazioni di database prevalgono sulle impostazioni delle opzioni dell'istanza impostate tramite sp_configure.

  • Per qualsiasi istruzione SET con le impostazioni ON e OFF è possibile specificare un'impostazione ON o OFF per più opzioni SET.

    Nota

    Ciò non vale per le opzioni SET correlate alle statistiche.

    SET QUOTED_IDENTIFIER, ANSI_NULLS ON , ad esempio, imposta sia QUOTED_IDENTIFIER che ANSI_NULLS su ON.

  • Le impostazioni delle istruzioni SET prevalgono sulle equivalenti impostazioni delle opzioni di database che vengono impostate utilizzando ALTER DATABASE. Il valore specificato in un'istruzione SET ANSI_NULLS, ad esempio, prevarrà sull'impostazione di database per ANSI_NULLS. Alcune connessioni, inoltre, vengono impostate automaticamente su ON quando un utente si connette a un database in base ai valori attivati dall'impostazione sp_configure user options precedente o ai valori validi per tutte le connessioni ODBC e OLE/DB.

  • Le istruzioni ALTER, CREATE e DROP DATABASE non rispettano l'impostazione di SET LOCK_TIMEOUT.

  • Quando un'istruzione SET globale o abbreviata, ad esempio SET ANSI_DEFAULTS, include più impostazioni, l'esecuzione dell'istruzione SET abbreviata ripristina le impostazioni precedenti per tutte le opzioni su cui ha effetto tale istruzione SET. Se una singola opzione SET su cui ha effetto un'istruzione SET abbreviata viene impostata in modo esplicito dopo l'esecuzione dell'istruzione SET abbreviata, la singola istruzione SET prevale sulle corrispondenti impostazioni dell'istruzione abbreviata.

  • Quando si utilizzano batch, il contesto del database è determinato dal batch definito con l'istruzione USE. Le query ad hoc e tutte le altre istruzioni che vengono eseguite all'esterno della stored procedure e che sono incluse in batch ereditano le impostazioni delle opzioni del database e della connessione definiti con l'istruzione USE.

  • Le richieste MARS (Multiple Active Result Set) condividono uno stato globale che contiene le impostazioni delle opzioni SET della sessione più recente. Quando viene eseguita, ogni richiesta può modificare le opzioni SET. Le modifiche sono specifiche del contesto della richiesta in cui sono impostato e non hanno alcun effetto sulle altre richieste MARS contemporanee. Al termine dell'esecuzione della richiesta, tuttavia, le nuove opzioni SET vengono copiate nello stato della sessione globale. Le nuove richieste che vengono eseguite nella stessa sessione dopo questa modifica utilizzeranno queste nuove impostazioni delle opzioni SET.

  • Una stored procedure eseguita da un batch o da un'altra stored procedure viene eseguita in base ai valori delle opzione impostate nel database che contiene la stored procedure. Se, ad esempio, la stored procedure db1.dbo.sp1 chiama la stored procedure db2.dbo.sp2, la stored procedure sp1 viene eseguita con l'impostazione corrente del livello di compatibilità del database db1 e la stored procedure sp2 viene eseguita con l'impostazione corrente del livello di compatibilità del database db2.

  • Quando un'istruzione Transact-SQL fa riferimento a oggetti che si trovano in più database, a tale istruzione si applicano il contesto del database corrente e il contesto della connessione corrente. In questo caso, se l'istruzione Transact-SQL si trova in un batch, il contesto della connessione corrente è il database definito dall'istruzione USE. Se l'istruzione Transact-SQL si trova in una stored procedure, il contesto della connessione è il database che contiene la stored procedure.

  • Quando si creano e modificano indici in colonne calcolate o viste indicizzate, le opzioni SET ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER, ANSI_NULLS, ANSI_PADDING e ANSI_WARNINGS devono essere impostate su ON. L'opzione NUMERIC_ROUNDABORT deve essere impostata su OFF.

    Se per una di queste opzioni non vengono impostati i valori richiesti, non sarà possibile eseguire in modo corretto le azioni INSERT, UPDATE, DELETE, DBCC CHECKDB e DBCC CHECKTABLE nelle viste indicizzate o nelle tabelle con indici nelle colonne calcolate. In SQL Server verrà generato un avviso contenente tutte le opzioni impostate in modo errato. SQL Server elaborerà, inoltre, le istruzioni SELECT in tali tabelle o viste indicizzate come se gli indici nelle colonne calcolate o nelle viste non esistessero.