Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureБаза данных SQL в Microsoft Fabric
Возвращает сведения о текущих параметрах инструкции SET.
Соглашения о синтаксисе Transact-SQL
Синтаксис
@@OPTIONS
Возвращаемый тип
integer
Замечания
Данный параметр может быть результатом использования команды SET или значения sp_configure user options. Значения сеанса, настроенные командой SET, переопределяют параметры sp_configure. Многие средства (такие как Среда Management Studio) автоматически настраивают набор параметров. Каждый пользователь имеет функцию @@OPTIONS, представляющую конфигурацию.
Вы можете изменить язык и параметры обработки запроса для определенного сеанса пользователя, используя выражение SET.
@@OPTIONS обнаруживает только параметры, для которых заданы значения ON или OFF.
Функция @@OPTIONS возвращает битовую матрицу параметров, преобразованную в десятичное целое число. Битовые параметры хранятся в местах, описанных в таблице в статье Настройка параметра конфигурации сервера user options.
Чтобы декодировать @@OPTIONS значение, преобразуйте целое число, возвращаемое @@OPTIONS в двоичный файл, а затем просмотрите значения в таблице в разделе "Настройка параметра конфигурации сервера параметров пользователя". Например, если SELECT @@OPTIONS; возвращает значение 5496, используйте калькулятор Windows в режиме "Программист" (calc.exe) для преобразования десятичного значения 5496 в двоичное. Результат 1010101111000. Самые правые символы (двоичные 1, 2 и 4) — нули. Это означает, что первые три элемента в таблице отключены. Если обратиться к таблице, можно увидеть, что это параметры DISABLE_DEF_CNST_CHK, IMPLICIT_TRANSACTIONS и CURSOR_CLOSE_ON_COMMIT. Следующий элемент (ANSI_WARNINGS на позиции 1000) находится в положении on. Продолжайте двигаться влево по битовой матрице и вниз по списку параметров. Если самые левые символы — нули, они усекаются при преобразовании типа. Битовая карта 1010101111000 фактически является 001010101111000 для представления всех 15 параметров.
Пример C предоставляет запрос, который автоматически сопоставляет @@OPTIONS битовую маску с пользовательскими параметрами.
Примеры
А. Пример того, как изменения влияют на поведение
Следующий пример демонстрирует разницу в поведении при конкатенации с двумя разными настройками параметра 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. Проверка настройки NOCOUNT клиента
В приведенном ниже примере задается аргумент NOCOUNT``ON, а затем проверяется значение @@OPTIONS. Параметр NOCOUNT``ON препятствует тому, чтобы сообщение о количестве обработанных строк отправлялось обратно клиенту при выполнении каждой инструкции в сеансе. Функции @@OPTIONS присваивается значение 512 (0x0200). Оно представляет аргумент NOCOUNT. В этом примере производится проверка того, задействован ли аргумент NOCOUNT у клиента. Например, он может помочь отследить отличия в производительности у клиента.
SET NOCOUNT ON
IF @@OPTIONS & 512 > 0
RAISERROR ('Current user has SET NOCOUNT turned on.', 1, 1)
В. Проверка битовой маски @@OPTIONS с помощью запроса PIVOT
В следующем примере конструкторы с табличным значением используются для создания ссылки на список чисел, а затем сравниваются со значением @@OPTIONS с помощью побитового оператора. Предложение APPLY выполняет конкатенацию строк для создания битовой маски символов, а другое предложение создает псевдонимы для проверки с использованием задокументированных значений из разделов "Настройка параметров пользователей" и "Параметр конфигурации сервера".
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. Проверка @@OPTIONS битовой маски с помощью GET_BIT
Область применения: SQL Server 2022 (16.x) и более поздних версий.
В следующем примере функция GET_BIT используется для получения значения из каждого конкретного бита.@@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