Delen via


@@OPTIONS (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

Retourinformatie over de huidige SET-opties.

Transact-SQL syntaxis-conventies

Syntaxis

@@OPTIONS

Resultaattype

geheel getal

Opmerkingen

De opties kunnen voortkomen uit het gebruik van het SET commando of uit de sp_configure user options waarde. Sessiewaarden die met het commando zijn geconfigureerd, SET overschrijven de sp_configure opties. Veel tools, zoals Management Studio, configureren automatisch setopties. Elke gebruiker heeft een @@OPTIONS functie die de configuratie vertegenwoordigt.

Je kunt de taal- en queryverwerkingsopties voor een specifieke gebruikerssessie wijzigen door de instructie te SET gebruiken. @@OPTIONS kan alleen de opties detecteren die op AAN of UIT staan.

De @@OPTIONS functie geeft een bitmap van de opties terug, omgezet in een basis 10 (decimaal) geheel getal. De bitinstellingen worden opgeslagen op de locaties die in een tabel in het artikel Configureer de gebruikersopties Server Configuration Option zijn.

Om de @@OPTIONS waarde te decoderen, zet je het gereturneerde geheel getal om @@OPTIONS naar binair en zoek je vervolgens de waarden op in de tabel bij Configureer de gebruikersopties Server Configuratie-optie. Als SELECT @@OPTIONS; bijvoorbeeld de waarde 5496teruggeeft, gebruik dan de Windows-programmeurcalculator (calc.exe) om decimaal 5496 om te zetten in binair. Het resultaat is 1010101111000. De meest rechtse tekens (binair 1, 2 en 4) staan op 0, wat aangeeft dat de eerste drie items in de tabel niet kloppen. Als je de tabel raadpleegt, zie je dat dat DISABLE_DEF_CNST_CHK, IMPLICIT_TRANSACTIONS, en CURSOR_CLOSE_ON_COMMITzijn. Het volgende item (ANSI_WARNINGS op de 1000 positie) staat aan. Blijf links werken via de bitmap en beneden in de lijst met opties. Wanneer de meest linkse opties 0 zijn, worden ze afgekapt door de typeconversie. De bitmap 1010101111000 is eigenlijk 001010101111000 bedoeld om alle 15 opties weer te geven.

Voorbeeld C biedt een query die het @@OPTIONS bitmasker automatisch aan gebruikersopties koppelt.

Voorbeelden

Eén. Demonstratie van hoe veranderingen gedrag beïnvloeden

Het volgende voorbeeld toont het verschil in concatenatiegedrag met twee verschillende instellingen van de CONCAT_NULL_YIELDS_NULL optie.

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. Test een client NOCOUNT-instelling

Het volgende voorbeeld stelt de waarde van vast en NOCOUNT``ON test vervolgens de waarde van @@OPTIONS. De NOCOUNT``ON optie voorkomt dat het bericht over het aantal getroffen rijen voor elke instructie in een sessie wordt teruggestuurd naar de aanvragende client. De waarde van @@OPTIONS wordt gezet op 512 (0x0200). Dit vertegenwoordigt de NOCOUNT-optie. Dit voorbeeld test of de NOCOUNT-optie op de client is ingeschakeld. Het kan bijvoorbeeld helpen om prestatieverschillen bij een klant te volgen.

SET NOCOUNT ON
IF @@OPTIONS & 512 > 0
RAISERROR ('Current user has SET NOCOUNT turned on.', 1, 1)

C. Bekijk @@OPTIONS bitmask met een PIVOT-query

Het volgende voorbeeld gebruikt tabelwaardige constructors om een getallenlijstreferentie te genereren en vergelijkt vervolgens de waarde van @@OPTIONS met een bitgewijze operator. Een APPLY-clausule voert stringconcatenatie uit om een tekenbitmasker te genereren, en een andere genereert aliassen om te controleren aan de hand van de gedocumenteerde waarden uit Configure the user options Server Configuration Option.

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. Bekijk @@OPTIONS bitmask met GET_BIT

Van toepassing op: SQL Server 2022 (16.x) en latere versies.

Het volgende voorbeeld gebruikt de GET_BIT-functie om de waarde van elk specifiek bit in @@OPTIONSte krijgen.

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

Zie ook