Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Base de Dados SQL do Azure
Instância Gerida do Azure SQL
Azure Synapse Analytics
Sistema de Plataforma de Análise (PDW)
Ponto de Extremidade de Análise SQL no Microsoft Fabric
Armazém no Microsoft Fabric
Base 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 o NUMERIC_ROUNDABORT SET está LIGADO, é gerado 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 o SET NUMERIC_ROUNDABORT estiver ativado, o 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 | VAMOS NUMERIC_ROUNDABORT | INICIAR NUMERIC_ROUNDABORT |
|---|---|---|
| DEFINIR O ARITHABORT EM | Gera-se erro; não foi apresentado nenhum conjunto de resultados. | Sem erros ou avisos; O resultado é arredondado. |
| DESLIGUE O ARITHABORT | 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.
O NUMERIC_ROUNDABORT SET deve estar DESLIGADO quando está a criar ou alterar índices em colunas computadas ou vistas indexadas. Se o NUMERIC_ROUNDABORT SET estiver ON, as seguintes instruções em tabelas com índices em colunas computadas ou vistas indexadas falham:
- CRIAR
- UPDATE
- INSERT
- DELETE
Para mais informações sobre as definições obrigatórias de opções SET com vistas e índices indexados em colunas computadas, consulte Considerações Quando Utiliza as Instruções SET.
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
Ver também
Tipos de dados (Transact-SQL)
Instruções SET (Transact-SQL)
SET ARITHABORT (Transact-SQL)