SET NUMERIC_ROUNDABORT (Transact-SQL)

Aplica-se a:SQL ServerBase de Dados SQL do AzureAzure SQL Managed InstanceAzure Synapse AnalyticsEndpoint de análise SQL no Microsoft FabricArmazém no Microsoft FabricBase de dados SQL no Microsoft Fabric

Especifica o nível de reporte de erro gerado ao arredondar numa expressão que causa perda de precisão.

Transact-SQL convenções de sintaxe

Sintaxe


SET NUMERIC_ROUNDABORT { ON | OFF }

Observações

Quando SET NUMERIC_ROUNDABORT está LIGADO, gera-se um erro após ocorrer uma perda de precisão numa expressão. Se definido para DESLIGADO, as perdas de precisão não geram mensagens de erro. O resultado é arredondado para a precisão da coluna ou variável que armazena o resultado.

A perda de precisão ocorre quando se tenta armazenar um valor com precisão fixa numa coluna ou variável com menor precisão.

Se SETSET NUMERIC_ROUNDABORT for ON, SET ARITHABORT determina a gravidade do erro gerado. Esta tabela mostra os efeitos destas duas definições quando ocorre uma perda de precisão.

Configuração SET NUMERIC_ROUNDABORT LIGADO SET NUMERIC_ROUNDABORT DESLIGADO
SET SET ARITHABORT LIGADO Gera-se erro; não foi apresentado nenhum conjunto de resultados. Sem erros ou avisos; O resultado é arredondado.
SET SET ARITHABORT DESLIGADO O aviso é devolvido; a expressão retorna NULL. Sem erros ou avisos; O resultado é arredondado.

A definição de SET NUMERIC_ROUNDABORT é definida em tempo de execução ou execução e não em tempo de análise sintática.

SET NUMERIC_ROUNDABORT deve estar DESLIGADO quando estás a criar ou alterar índices em colunas calculadas ou vistas indexadas. Se SET NUMERIC_ROUNDABORT for ON, as seguintes instruções em tabelas com índices em colunas calculadas ou vistas indexadas falham:

  • CRIAR
  • UPDATE
  • INSERT
  • DELETE

Para mais informações sobre as definições de opções obrigatórias SET com visualizações indexadas e índices em colunas calculadas, consulte Considerações Quando Utiliza as SET Sentenças.

Para visualizar a definição atual desta definiçã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;  
  

Permissions

Requer adesão à função pública de .

Examples

O exemplo seguinte mostra dois valores que são precisos até quatro casas decimais. Eles são adicionados e armazenados numa variável que é precisa até dois decimais. As expressões demonstram os efeitos dos diferentes SET NUMERIC_ROUNDABORT e SET ARITHABORT dos contextos.

-- 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