@@OPTIONS (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance
Gibt Informationen zu den aktuellen SET-Optionen zurück.
Transact-SQL-Syntaxkonventionen
Syntax
@@OPTIONS
Rückgabetyp
integer
Bemerkungen
Diese Optionen sind möglicherweise auf das Verwenden des Befehls SET
oder auf den Wert sp_configure user options
zurückzuführen. Mithilfe des Befehls SET
konfigurierte Sitzungswerte setzen die sp_configure
-Optionen außer Kraft. Viele Tools (beispielsweise Management Studio) konfigurieren SET-Optionen automatisch. Alle Benutzer*innen verfügen über eine @@OPTIONS
-Funktion, die die Konfiguration darstellt.
Sie können die Sprach- und Abfrageverarbeitungsoptionen für eine bestimmte Benutzersitzung mithilfe der Anweisung SET
ändern. @@OPTIONS
kann nur die Optionen erkennen, die auf „ON“ oder „OFF“ festgelegt sind.
Die Funktion @@OPTIONS
gibt eine Bitmap der Optionen zurück, die in einen Integer zur Basis 10 (dezimal) konvertiert wurde. Die Biteinstellungen werden an den in einer Tabelle im Artikel Serverkonfigurationsoption „Konfigurieren der Benutzeroptionen“ beschriebenen Orten gespeichert.
Konvertieren Sie den von @@OPTIONS
zurückgegebenen Integer in das Binärformat, und suchen Sie in der unter Konfigurieren der Benutzeroptionen für die Serverkonfigurationsoption aufgeführten Tabelle nach den Werten, um den @@OPTIONS
-Wert zu decodieren. Wenn beispielsweise SELECT @@OPTIONS;
den Wert 5496
zurückgibt, verwenden Sie den Windows-Rechner (calc.exe), um die Dezimalzahl 5496
ins Binärformat zu konvertieren. Das Ergebnis ist 1010101111000
. Die am weitesten rechts stehenden Zeichen (Binärwerte 1, 2 und 4) haben den Wert 0, was bedeutet, dass die ersten drei Elemente in der Tabelle deaktiviert sind. In der Tabelle sehen Sie, dass es sich um DISABLE_DEF_CNST_CHK
, IMPLICIT_TRANSACTIONS
und CURSOR_CLOSE_ON_COMMIT
handelt. Das nächste Element – ANSI_WARNINGS
an der Position 1000
– ist aktiviert. Fahren Sie auf der linken Seite mit der Bitmap und der Liste der Optionen nach unten fort. Wenn die ganz links stehenden Optionen einen Wert von 0 (null) aufweisen, wurden sie durch die Typkonvertierung abgeschnitten. Bei der Bitmap 1010101111000
handelt es sich tatsächlich um 001010101111000
, um alle 15 Optionen darzustellen.
Beispiel C stellt eine Abfrage bereit, die die @@OPTIONS
-Bitmaske automatisch den Benutzeroptionen zuordnet.
Beispiele
A. So wirken sich Änderungen auf das Verhalten aus
Das folgende Beispiel veranschaulicht die Unterschiede im Verkettungsverhalten bei zwei verschiedenen Einstellungen für die 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;
B. Testen einer NOCOUNT-Clienteinstellung
Das folgende Beispiel legt NOCOUNT``ON
fest und testet dann den Wert von @@OPTIONS
. Die Option NOCOUNT``ON
verhindert, dass die Nachricht über die Anzahl von betroffenen Zeilen an den anfordernden Client für jede Anweisung in einer Sitzung zurückgegeben wird. Für den Wert von @@OPTIONS
wird 512
(0x0200) festgelegt. Dies stellt die Option NOCOUNT dar. Dieses Beispiel testet, ob die Option NOCOUNT auf dem Client aktiviert wurde. Dadurch können beispielsweise Leistungsunterschiede auf einem Client nachverfolgt werden.
SET NOCOUNT ON
IF @@OPTIONS & 512 > 0
RAISERROR ('Current user has SET NOCOUNT turned on.', 1, 1)
C. Überprüfen einer „@@OPTIONS“-Bitmaske mit einer „PIVOT“-Abfrage
Im folgenden Beispiel werden Tabellenwertkonstruktoren verwendet, um einen Zahlenlistenverweis zu generieren und dann den Wert von @@OPTIONS
mit einem bitweisen Operator zu vergleichen. Eine „APPLY“-Klausel führt eine Zeichenfolgenverkettung aus, um eine Zeichenbitmaske zu generieren. Eine andere generiert Aliase, um sie mit den dokumentierten Werte aus der Serverkonfigurationsoption „Konfigurieren der Benutzeroptionen“ zu überprüfen.
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;
D: Überprüfen einer @@OPTIONS-Bitmaske mit GET_BIT
Gilt für: SQL Server 2022 (16.x) und höhere Versionen.
Im folgenden Beispiel wird die Funktion GET_BIT verwendet, um den Wert aus den einzelnen Bits in @@OPTIONS
abzurufen.
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