SET NUMERIC_ROUNDABORT (Transact-SQL)
Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)Ponto de extremidade de SQL no Microsoft FabricWarehouse no Microsoft Fabric
Especifica o nível dos relatórios de erro gerados quando o arredondamento de uma expressão provoca perda de exatidão.
Convenções de sintaxe de Transact-SQL
Sintaxe
SET NUMERIC_ROUNDABORT { ON | OFF }
Observação
Para ver a sintaxe do Transact-SQL para o SQL Server 2014 (12.x) e versões anteriores, confira a Documentação das versões anteriores.
Comentários
Quando SET NUMERIC_ROUNDABORT é ON, um erro é gerado depois de ocorrer uma perda de precisão em uma expressão. Se definido como OFF, perdas de precisão não geram mensagens de erro. O resultado é arredondado de acordo com a precisão da coluna ou variável que armazena o resultado.
A perda de precisão ocorre quando é feita uma tentativa de armazenar um valor com uma precisão fixa em uma coluna ou variável com menos precisão.
Se SET NUMERIC_ROUNDABORT for ON, SET ARITHABORT determinará a severidade do erro gerado. Esta tabela mostra os efeitos dessas duas configurações quando ocorre uma perda de precisão.
Configuração | SET NUMERIC_ROUNDABORT ON | SET NUMERIC_ROUNDABORT OFF |
---|---|---|
SET ARITHABORT ON | O erro é gerado; nenhum conjunto de resultados é retornado. | Nenhum erro ou aviso; o resultado é arredondado. |
SET ARITHABORT OFF | Um aviso é retornado; a expressão retorna NULL. | Nenhum erro ou aviso; o resultado é arredondado. |
A configuração de SET NUMERIC_ROUNDABORT é definida na execução ou em tempo de execução, e não no momento da análise.
SET NUMERIC_ROUNDABORT deve ser OFF quando você estiver criando ou alterando índices em colunas computadas ou modos de exibição indexados. Se SET NUMERIC_ROUNDABORT for ON, as instruções a seguir nas tabelas com índices em colunas computadas ou exibições indexadas falharão:
- CREATE
- UPDATE
- INSERT
- Delete (excluir)
Para obter mais informações sobre as configurações da opção SET com exibições indexadas e índices em colunas computadas, veja Considerações sobre o uso das instruções SET.
Para exibir a configuração atual dessa configuração, execute a seguinte consulta:
DECLARE @NUMERIC_ROUNDABORT VARCHAR(3) = 'OFF';
IF ( (8192 & @@OPTIONS) = 8192 ) SET @NUMERIC_ROUNDABORT = 'ON';
SELECT @NUMERIC_ROUNDABORT AS NUMERIC_ROUNDABORT;
Permissões
Requer associação à função pública .
Exemplos
O exemplo a seguir mostra dois valores que são precisos para quatro casas decimais. Eles são adicionados e armazenados em uma variável que é precisa para duas casas decimais. As expressões demonstram os efeitos das diferentes configurações SET NUMERIC_ROUNDABORT
e SET ARITHABORT
.
-- SET NOCOUNT to ON,
-- SET NUMERIC_ROUNDABORT to ON, and SET ARITHABORT to ON.
SET NOCOUNT ON;
PRINT 'SET NUMERIC_ROUNDABORT ON';
PRINT 'SET ARITHABORT ON';
SET NUMERIC_ROUNDABORT ON;
SET ARITHABORT ON;
GO
DECLARE @result DECIMAL(5, 2),
@value_1 DECIMAL(5, 4),
@value_2 DECIMAL(5, 4);
SET @value_1 = 1.1234;
SET @value_2 = 1.1234 ;
SELECT @result = @value_1 + @value_2;
SELECT @result;
GO
-- SET NUMERIC_ROUNDABORT to ON and SET ARITHABORT to OFF.
PRINT 'SET NUMERIC_ROUNDABORT ON';
PRINT 'SET ARITHABORT OFF';
SET NUMERIC_ROUNDABORT ON;
SET ARITHABORT OFF;
GO
DECLARE @result DECIMAL(5, 2),
@value_1 DECIMAL(5, 4),
@value_2 DECIMAL(5, 4);
SET @value_1 = 1.1234;
SET @value_2 = 1.1234 ;
SELECT @result = @value_1 + @value_2;
SELECT @result;
GO
-- SET NUMERIC_ROUNDABORT to OFF and SET ARITHABORT to ON.
PRINT 'SET NUMERIC_ROUNDABORT OFF';
PRINT 'SET ARITHABORT ON';
SET NUMERIC_ROUNDABORT OFF;
SET ARITHABORT ON;
GO
DECLARE @result DECIMAL(5, 2),
@value_1 DECIMAL(5, 4),
@value_2 DECIMAL(5, 4);
SET @value_1 = 1.1234;
SET @value_2 = 1.1234 ;
SELECT @result = @value_1 + @value_2;
SELECT @result;
GO
-- SET NUMERIC_ROUNDABORT to OFF and SET ARITHABORT to OFF.
PRINT 'SET NUMERIC_ROUNDABORT OFF';
PRINT 'SET ARITHABORT OFF';
SET NUMERIC_ROUNDABORT OFF;
SET ARITHABORT OFF;
GO
DECLARE @result DECIMAL(5, 2),
@value_1 DECIMAL(5, 4),
@value_2 DECIMAL(5, 4);
SET @value_1 = 1.1234;
SET @value_2 = 1.1234;
SELECT @result = @value_1 + @value_2;
SELECT @result;
GO
Consulte Também
Tipos de dados (Transact-SQL)
Instruções SET (Transact-SQL)
SET ARITHABORT (Transact-SQL)
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de