@@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

Weitere Informationen