Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada de SQL do Azure
Banco de dados SQL no Microsoft Fabric
Retorna informações sobre as opções SET atuais.
Convenções de sintaxe de Transact-SQL
Sintaxe
@@OPTIONS
Tipo de retorno
inteiro
Comentários
As opções podem vir do uso do comando SET ou do valor sp_configure user options. Os valores de sessão configurados com o comando SET substituem as opções sp_configure. Muitas ferramentas (como o Management Studio) configuram automaticamente as opções do conjunto. Cada usuário tem uma função @@OPTIONS que representa a configuração.
Você pode alterar as opções de linguagem e de processamento de consulta para uma sessão de usuário específica usando a instrução SET.
@@OPTIONS pode detectar apenas as opções que estão definidas como ON ou OFF.
A função @@OPTIONS retorna um bitmap das opções, convertidas em um inteiro de base 10 (decimal). As configurações de bits são armazenadas nas localizações descritas em uma tabela no artigo Configurar a opção de configuração do servidor de opções do usuário.
Para decodificar o valor @@OPTIONS, converta o inteiro retornado por @@OPTIONS em binário e, depois, examine os valores na tabela em Configurar a opção user options de configuração do servidor. Por exemplo, se SELECT @@OPTIONS; retornar o valor de 5496, use a calculadora do programador do Windows (calc.exe) para converter o decimal 5496 em binário. O resultado é 1010101111000. Os caracteres mais à direita (binário 1, 2 e 4) são 0, indicando que os primeiros três itens da tabela estão desativados. Consultando a tabela, você verá que eles são DISABLE_DEF_CNST_CHK, IMPLICIT_TRANSACTIONS e CURSOR_CLOSE_ON_COMMIT. O próximo item (ANSI_WARNINGS na posição 1000) está ativado. Continue trabalhando à esquerda pelo bitmap e para baixo na lista de opções. Quando as opções mais à esquerda forem 0, elas serão truncadas pela conversão de tipo. O bitmap 1010101111000 é na verdade 001010101111000 para representar todas as 15 opções.
O exemplo C fornece uma consulta que mapeia automaticamente o bitmask @@OPTIONS para as opções do usuário.
Exemplos
a. Demonstração de como as alterações afetam o comportamento
O exemplo a seguir demonstra a diferença no comportamento de concatenação com duas configurações diferentes da opção 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. Testar uma configuração de cliente NOCOUNT
O exemplo a seguir define NOCOUNT``ON e, em seguida, e testa o valor de @@OPTIONS. A opção NOCOUNT``ON impede que a mensagem sobre o número de linhas afetadas seja enviada novamente ao cliente solicitante para cada instrução em uma sessão. O valor de @@OPTIONS é definido como 512 (0x0200). Isto representa a opção NOCOUNT. Este exemplo testa se a opção NOCOUNT está habilitada no cliente. Por exemplo, isso pode ajudar a controlar diferenças de desempenho em um cliente.
SET NOCOUNT ON
IF @@OPTIONS & 512 > 0
RAISERROR ('Current user has SET NOCOUNT turned on.', 1, 1)
C. Examinar o bitmask @@OPTIONS com uma consulta PIVOT
O exemplo a seguir usa construtores com valor de tabela para gerar uma referência de lista de números e compara o valor de @@OPTIONS com um operador bit a bit. Uma cláusula APPLY executa a concatenação de cadeia de caracteres para gerar um bitmask de caractere e outro gera aliases para examinar os valores documentados de Configurar a opção de configuração do servidor de opções do usuário.
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. Examinar o bitmask @@OPTIONS com GET_BIT
Aplica-se a: SQL Server 2022 (16.x) e versões posteriores.
O seguinte exemplo usa a função GET_BIT para obter o valor de cada bit específico em @@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