sql-server - 发生小数点四舍五入时引发错误

标签 sql-server

我在 @MyTable 表中有 [BRKTFRT1] [decimal](7, 4) 列。

当我尝试插入值 34.1234555 时,它成功地将 34.1235 插入到列中。实际上,我需要防止这种舍入,并在需要任何此类舍入时引发错误。我们如何添加这样的约束?

注意:一种想法是检查输入字符串的长度。但我想将其添加为 CHECK 约束,这样开发人员就不会错过这个约束。

注意:我使用的是 SQL Server 2012

注意:我并不是想“避免”舍入。我需要通知调用程序它们提供了不正确的值(通过引发错误)。

DECLARE @MyTable TABLE (BRKTFRT1 [decimal](7, 4) )

DECLARE @MyStringDecimal VARCHAR(20)
SET @MyStringDecimal = '34.1234555'

INSERT INTO @MyTable (BRKTFRT1) VALUES (@MyStringDecimal)
SELECT BRKTFRT1 FROM @MyTable

最佳答案

看看SET NUMERIC_ROUNDABORT

When SET NUMERIC_ROUNDABORT is ON, an error is generated after a loss of precision occurs in an expression. [...] Loss of precision occurs when an attempt is made to store a value with a fixed precision in a column or variable with less precision

关于sql-server - 发生小数点四舍五入时引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18307122/

相关文章:

sql-server - SQL Server删除锁问题

sql-server - 带有变量的sql use语句

sql-server - 将新列添加到源表后,CDC 表无法工作

sql-server - 修改存储在 SQL Server 表中的 XML 文档中的日期字段

sql-server - 从 NOT NULL 重新开始的 NULL 累积计数

.net - ADO .Net - 如何在具有多个 IP 地址的系统上的 SqlConnection 中指定源 IP 地址

sql - 有没有办法确定 SQL Server 存储过程返回记录集

sql - SQL Server 中 "Distribution Option"中的 "CREATE TABLE table AS"错误

sql - 根据列值生成行

sql - 完善使用BULK INSERT查询