发生小数点舍入时引发错误

时间:2013-08-19 05:50:11

标签: sql-server

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

当我尝试插入值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

1 个答案:

答案 0 :(得分:4)

查看SET NUMERIC_ROUNDABORT

  

当SET NUMERIC_ROUNDABORT为ON时,在表达式中发生精度损失后会生成错误。 [...]   当试图在具有较低精度的列或变量中存储具有固定精度的值时,会发生精度损失