Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w usłudze Microsoft Fabric
Zwraca informacje o aktualnych opcjach SET.
Transact-SQL konwencje składni
Składnia
@@OPTIONS
Typ zwracany
integer
Uwagi
Opcje mogą pochodzić z użycia SET polecenia lub z sp_configure user options wartości. Wartości sesji konfigurowane przez SET polecenie nadpisujące sp_configure opcje. Wiele narzędzi, takich jak Management Studio, automatycznie konfiguruje opcje zestawu. Każdy użytkownik ma @@OPTIONS funkcję reprezentującą konfigurację.
Możesz zmienić język i opcje przetwarzania zapytań dla konkretnej sesji użytkownika, używając SET tego polecenia.
@@OPTIONS wykrywa tylko opcje ustawione na WŁĄCZONE lub WYŁĄCZONE.
Funkcja @@OPTIONS zwraca bitmapę opcji, przekształconą w liczbę całkowitą z bazy 10 (dziesiętną). Ustawienia bitów są przechowywane w lokalizacjach opisanych w tabeli w artykule Konfiguruj opcje użytkownika Opcja konfiguracji serwera.
Aby zdekodować wartość @@OPTIONS , przekonwertuj liczbę całkowitą zwróconą przez na @@OPTIONS binarną, a następnie wyszukaj wartości w tabeli w opcji konfiguracji serwera Konfiguruj opcje użytkownika. Na przykład, jeśli SELECT @@OPTIONS; zwraca wartość 5496, użyj kalkulatora programisty Windows (calc.exe), aby przekonwertować dziesiętne 5496 na binarne. Wynik jest 1010101111000. Najbardziej prawe znaki (binarne 1, 2 i 4) to 0, co oznacza, że pierwsze trzy elementy tabeli są nieprawidłowe. Przeglądając tabelę, widzisz, że są DISABLE_DEF_CNST_CHKto , IMPLICIT_TRANSACTIONS, oraz CURSOR_CLOSE_ON_COMMIT. Następny element (ANSI_WARNINGS na 1000 pozycji) jest włączony. Kontynuuj pracę w lewo przez mapę bitową i w dół w liście opcji. Gdy najbardziej lewe opcje są 0, są one obcięte przez konwersję typów. Mapa 1010101111000 bitowa ma reprezentować 001010101111000 wszystkie 15 opcji.
Przykład C dostarcza zapytanie, które automatycznie mapuje maskę @@OPTIONS bitową na opcje użytkownika.
Przykłady
A. Pokazanie, jak zmiany wpływają na zachowanie
Poniższy przykład pokazuje różnicę w zachowaniu konkatenacji przy dwóch różnych ustawieniach CONCAT_NULL_YIELDS_NULL tej opcji.
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. Przetestuj ustawienie NOCOUNT klienta
Poniższy przykład ustawia i następnie testuje NOCOUNT``ON wartość .@@OPTIONS Opcja ta NOCOUNT``ON zapobiega wysyłaniu wiadomości o liczbie dotkniętych wierszy do klienta żądającego dla każdego wyciągu w sesji. Wartość jest @@OPTIONS ustawiona na 512 (0x0200). To jest opcja NOCOUNT. Ten przykład sprawdza, czy opcja NOCOUNT jest włączona na kliencie. Na przykład może pomóc śledzić różnice w wydajności klienta.
SET NOCOUNT ON
IF @@OPTIONS & 512 > 0
RAISERROR ('Current user has SET NOCOUNT turned on.', 1, 1)
C. Przejrzyj @@OPTIONS bitmask za pomocą zapytania PIVOT
Poniższy przykład wykorzystuje konstruktory tabelowe do wygenerowania referencji do listy liczb, a następnie porównuje wartość z @@OPTIONS operatorem bitowym. Klauzula APPLY wykonuje konkatenację ciągów w celu wygenerowania bitmaski znaku, a inna generuje aliasy do porównania z udokumentowanymi wartościami w opcji konfiguracji serwera Konfiguruj użytkownika.
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. Przejrzyj @@OPTIONS bitmask z GET_BIT
Dotyczy: SQL Server 2022 (16.x) i nowsze wersje.
Poniższy przykład wykorzystuje funkcję GET_BIT do uzyskania wartości z każdego konkretnego bitu w @@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