@@OPTIONS (Transact-SQL)
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance
Retourne des informations sur les options SET actuelles.
Conventions de la syntaxe Transact-SQL
@@OPTIONS
integer
Les options peuvent provenir de l'utilisation de la commande SET
ou de la valeur sp_configure user options
. Les valeurs de session configurées avec la commande SET
remplacent les options sp_configure
. De nombreux outils, tels que Management Studio, configurent automatiquement les options de l’ensemble. Chaque utilisateur dispose d’une fonction @@OPTIONS
qui représente la configuration.
Vous pouvez modifier les options de langage et de traitement des requêtes pour une session utilisateur spécifique à l'aide de l'instruction SET
. @@OPTIONS
peut détecter uniquement les options qui ont la valeur ON ou OFF.
La fonction @@OPTIONS
renvoie une image bitmap des options, convertie en entier de base 10 (décimal). Les paramètres de bit sont stockés dans les emplacements décrits dans une table de l’article Configurer l’option Configuration de serveur des options utilisateur.
Pour décoder la valeur @@OPTIONS
, convertissez l’entier retourné par @@OPTIONS
en binaire, puis recherchez les valeurs du tableau dans Configurer l’option de configuration de serveur user options. Par exemple, si SELECT @@OPTIONS;
renvoie la valeur 5496
, utilisez la calculatrice de programmation Windows (calc.exe) pour convertir la valeur décimale 5496
au format binaire. Le résultat est 1010101111000
. Les caractères situés les plus à droite (1, 2 et 4 binaires) sont 0, ce qui indique que les trois premiers éléments de la table sont désactivés. En consultant la table, vous voyez qu’il s’agit de DISABLE_DEF_CNST_CHK
, IMPLICIT_TRANSACTIONS
et CURSOR_CLOSE_ON_COMMIT
. L'élément suivant (ANSI_WARNINGS
dans la position 1000
) est activé. Continuez à parcourir l’image bitmap vers la gauche et la liste des options vers le bas. Quand les options les plus à gauche sont 0, elles sont tronquées par la conversion de type. Le bitmap 1010101111000
est en fait 001010101111000
et représente les 15 options.
L’exemple C fournit une requête qui mappe automatiquement le masque de bits @@OPTIONS
aux options utilisateur.
L'exemple suivant illustre la différence de comportement de concaténation avec deux paramètres différents de l'option CONCAT_NULL_YIELDS_NULL
.
SELECT @@OPTIONS AS OriginalOptionsValue;
SET CONCAT_NULL_YIELDS_NULL OFF;
SELECT 'abc' + NULL AS ResultWhen_OFF, @@OPTIONS AS OptionsValueWhen_OFF;
SET CONCAT_NULL_YIELDS_NULL ON;
SELECT 'abc' + NULL AS ResultWhen_ON, @@OPTIONS AS OptionsValueWhen_ON;
L’exemple suivant définit NOCOUNT``ON
, puis teste la valeur de @@OPTIONS
. L’option NOCOUNT``ON
empêche le message relatif au nombre de lignes affectées d’être renvoyé au client demandeur pour chaque instruction d’une session. La fonction @@OPTIONS
a pour valeur 512
(0x0200). Ceci représente l'option NOCOUNT. Cet exemple teste si l'option NOCOUNT est activée sur le client. Vous pouvez vous en servir pour rechercher les différences de performances sur un ordinateur client.
SET NOCOUNT ON
IF @@OPTIONS & 512 > 0
RAISERROR ('Current user has SET NOCOUNT turned on.', 1, 1)
L’exemple suivant utilise des constructeurs table pour générer une référence de liste de nombres, puis compare la valeur de @@OPTIONS
avec un opérateur au niveau du bit. Une clause APPLY effectue une concaténation de chaînes pour générer un masque de bits de caractères et une autre génère des alias pour évaluer les valeurs documentées à partir de Configurer l’option Configuration de serveur des options utilisateur.
SELECT S.Bits,
Flags.*
FROM (
SELECT optRef,
posRef,
flagCheck
FROM (
SELECT ones.n + tens.n * 10
FROM ( VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9) ) ones(n),
( VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9) ) tens(n)
) f1(powRef)
CROSS APPLY (
SELECT POWER(2, powRef)
WHERE powRef <= 16
) f2(binRef)
CROSS JOIN (
VALUES (@@OPTIONS)
) f3(optRef)
CROSS APPLY (
SELECT (optRef & binRef) / binRef
) f4(flagRef)
CROSS APPLY (
SELECT RIGHT(CONVERT(VARCHAR(2), CAST(powRef AS VARBINARY(1)), 2), 1) [posRef],
CAST(flagRef AS INT) [flagCheck]
) pref
) TP
PIVOT( MAX( flagCheck ) FOR posRef IN ( [0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [A], [B], [C], [D], [E], [F] )) P
CROSS APPLY (
SELECT CONCAT ( '', [0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [A], [B], [C], [D], [E], [F] ),
CONCAT ( '', [F], [E], [D], [C], [B], [A], [9], [8], [7], [6], [5], [4], [3], [2], [1], [0] )
) S (stib, Bits)
CROSS APPLY (
SELECT
CAST(P.[0] AS BIT) /* 1 */ [DISABLE_DEF_CNST_CHK] -- Controls interim or deferred constraint checking.
, CAST(P.[1] AS BIT) /* 2 */ [IMPLICIT_TRANSACTIONS] -- For dblib network library connections, controls whether a transaction is started implicitly when a statement is executed. The IMPLICIT_TRANSACTIONS setting has no effect on ODBC or OLEDB connections.
, CAST(P.[2] AS BIT) /* 4 */ [CURSOR_CLOSE_ON_COMMIT] -- Controls behavior of cursors after a commit operation has been performed.
, CAST(P.[3] AS BIT) /* 8 */ [ANSI_WARNINGS] -- Controls truncation and NULL in aggregate warnings.
, CAST(P.[4] AS BIT) /* 16 */ [ANSI_PADDING] -- Controls padding of fixed-length variables.
, CAST(P.[5] AS BIT) /* 32 */ [ANSI_NULLS] -- Controls NULL handling when using equality operators.
, CAST(P.[6] AS BIT) /* 64 */ [ARITHABORT] -- Terminates a query when an overflow or divide-by-zero error occurs during query execution.
, CAST(P.[7] AS BIT) /* 128 */ [ARITHIGNORE] -- Returns NULL when an overflow or divide-by-zero error occurs during a query.
, CAST(P.[8] AS BIT) /* 256 */ [QUOTED_IDENTIFIER] -- Differentiates between single and double quotation marks when evaluating an expression.
, CAST(P.[9] AS BIT) /* 512 */ [NOCOUNT] -- Turns off the message returned at the end of each statement that states how many rows were affected.
, CAST(P.[A] AS BIT) /* 1024 */ [ANSI_NULL_DFLT_ON] -- Alters the session's behavior to use ANSI compatibility for nullability. New columns defined without explicit nullability are defined to allow nulls.
, CAST(P.[B] AS BIT) /* 2048 */ [ANSI_NULL_DFLT_OFF] -- Alters the session's behavior not to use ANSI compatibility for nullability. New columns defined without explicit nullability do not allow nulls.
, CAST(P.[C] AS BIT) /* 4096 */ [CONCAT_NULL_YIELDS_NULL] -- Returns NULL when concatenating a NULL value with a string.
, CAST(P.[D] AS BIT) /* 8192 */ [NUMERIC_ROUNDABORT] -- Generates an error when a loss of precision occurs in an expression.
, CAST(P.[E] AS BIT) /* 16384 */ [XACT_ABORT] -- Rolls back a transaction if a Transact-SQL statement raises a run-time error.*/
) AS Flags;
S’applique à : SQL Server 2022 (16.x) et versions ultérieures.
L’exemple suivant utilise la fonction GET_BIT pour obtenir la valeur de chaque bit spécifique dans @@OPTIONS
.
SELECT
GET_BIT(@@OPTIONS, 0) /* 1 */ AS [DISABLE_DEF_CNST_CHK] -- Controls interim or deferred constraint checking.
, GET_BIT(@@OPTIONS, 1) /* 2 */ AS [IMPLICIT_TRANSACTIONS] -- For dblib network library connections, controls whether a transaction is started implicitly when a statement is executed. The IMPLICIT_TRANSACTIONS setting has no effect on ODBC or OLEDB connections.
, GET_BIT(@@OPTIONS, 2) /* 4 */ AS [CURSOR_CLOSE_ON_COMMIT] -- Controls behavior of cursors after a commit operation has been performed.
, GET_BIT(@@OPTIONS, 3) /* 8 */ AS [ANSI_WARNINGS] -- Controls truncation and NULL in aggregate warnings.
, GET_BIT(@@OPTIONS, 4) /* 16 */ AS [ANSI_PADDING] -- Controls padding of fixed-length variables.
, GET_BIT(@@OPTIONS, 5) /* 32 */ AS [ANSI_NULLS] -- Controls NULL handling when using equality operators.
, GET_BIT(@@OPTIONS, 6) /* 64 */ AS [ARITHABORT] -- Terminates a query when an overflow or divide-by-zero error occurs during query execution.
, GET_BIT(@@OPTIONS, 7) /* 128 */ AS [ARITHIGNORE] -- Returns NULL when an overflow or divide-by-zero error occurs during a query.
, GET_BIT(@@OPTIONS, 8) /* 256 */ AS [QUOTED_IDENTIFIER] -- Differentiates between single and double quotation marks when evaluating an expression.
, GET_BIT(@@OPTIONS, 9) /* 512 */ AS [NOCOUNT] -- Turns off the message returned at the end of each statement that states how many rows were affected.
, GET_BIT(@@OPTIONS, 10) /* 1024 */ AS [ANSI_NULL_DFLT_ON] -- Alters the session's behavior to use ANSI compatibility for nullability. New columns defined without explicit nullability are defined to allow nulls.
, GET_BIT(@@OPTIONS, 11) /* 2048 */ AS [ANSI_NULL_DFLT_OFF] -- Alters the session's behavior not to use ANSI compatibility for nullability. New columns defined without explicit nullability do not allow nulls.
, GET_BIT(@@OPTIONS, 12) /* 4096 */ AS [CONCAT_NULL_YIELDS_NULL] -- Returns NULL when concatenating a NULL value with a string.
, GET_BIT(@@OPTIONS, 13) /* 8192 */ AS [NUMERIC_ROUNDABORT] -- Generates an error when a loss of precision occurs in an expression.
, GET_BIT(@@OPTIONS, 14) /* 16384 */ AS [XACT_ABORT] -- Rolls back a transaction if a Transact-SQL statement raises a run-time error.*/
GO