Istruzioni SET (Transact-SQL)
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW) Endpoint di analisi SQL in Microsoft Fabric Warehouse in Microsoft Fabric
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).
Considerazioni sull'utilizzo delle istruzioni SET
Tutte le istruzioni SET vengono eseguite in fase di esecuzione, tranne queste che vengono eseguite in fase di analisi:
- SET FIPS_FLAGGER
- SET OFFSETS
- SET PARSEONLY
- SET QUOTED_IDENTIFIER
Se un'istruzione SET viene eseguita in una stored procedure o in un trigger, il valore dell'opzione SET viene ripristinato quando la stored procedure o il trigger restituisce il controllo. Se si specifica un'istruzione SET in una stringa SQL dinamica eseguita con sp_executesql o EXECUTE, inoltre, il valore dell'opzione SET viene ripristinato quando il batch indicato nella stringa SQL dinamica restituisce il controllo.
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.
Se un'istruzione SET usa ON e OFF, è possibile specificare una delle due impostazioni per più opzioni SET.
Nota
Questo non si applica alle opzioni SET correlate a statistiche.
Ad esempio
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
imposta sia QUOTED_IDENTIFIER che ANSI_NULLS su ON.Le impostazioni delle istruzioni SET eseguono l'override delle identiche impostazioni delle opzioni di database configurate con ALTER DATABASE. Il valore specificato in un'istruzione SET ANSI_NULLS, ad esempio, prevarrà sull'impostazione di database per ANSI_NULLS. Alcune impostazioni di connessione, inoltre, vengono impostate automaticamente su ON quando un utente si connette a un database in base ai valori applicati con il precedente uso dell'impostazione user options di sp_configure o ai valori applicati a 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 di scelta rapida include diverse impostazioni, eseguendola vengono ripristinate le impostazioni precedenti per tutte le opzioni interessate. Se un'opzione SET interessata da un'istruzione SET di scelta rapida viene impostata dopo l'esecuzione di tale istruzione, la singola istruzione SET eseguirà l'override delle impostazioni corrispondenti dell'istruzione di scelta rapida. Un esempio di istruzione SET di scelta rapida è SET ANSI_DEFAULTS.
Quando si usano batch, il contesto di database è determinato dal batch stabilito con l'istruzione USE. Le query non pianificate e tutte le altre istruzioni all'esterno della stored procedure e incluse in batch ereditano le impostazioni delle opzioni del database e della connessione stabilite 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 vengono impostate e non influiscono sulle altre richieste MARS simultanee. 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 opzioni configurati nel database contenente la stored procedure. Se la stored procedure db1.dbo.sp1 chiama la stored procedure db2.dbo.sp2, ad esempio, 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 riguarda oggetti che si trovano in più database, a tale istruzione si applicano il contesto del database e il contesto della connessione correnti. 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 si modificano gli indici in colonne calcolate o viste indicizzate, è necessario impostare queste opzioni SET su ON: ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER, ANSI_NULLS, ANSI_PADDING e ANSI_WARNINGS. Impostare l'opzione NUMERIC_ROUNDABORT su OFF.
Se una di queste opzioni non viene impostata sui valori obbligatori, le azioni INSERT, UPDATE, DELETE, DBCC CHECKDB e DBCC CHECKTABLE sulle viste indicizzate o sulle tabelle con indici su colonne calcolate avranno esito negativo. SQL Server genererà un avviso contenente tutte le opzioni impostate in modo errato. SQL Server elaborerà inoltre le istruzioni SELECT su tali tabelle o viste indicizzate come se gli indici sulle colonne calcolate o sulle viste non esistessero.
Quando l'istruzione SET RESULT_SET_CACHING è impostata su ON, la funzionalità di memorizzazione nella cache dei risultati per la sessione client corrente è abilitata. Non è possibile impostare RESULT_SET_CACHING su ON per una sessione se è impostata su OFF a livello del database. Quando l'istruzione SET RESULT_SET_CACHING è impostata su OFF, la funzionalità di memorizzazione nella cache dei set di risultati per la sessione client corrente è disabilitata. Per modificare questa impostazione è richiesta l'appartenenza al ruolo public. Si applica a: Azure Synapse Analytics Gen2