我在[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
答案 0 :(得分:4)
当SET NUMERIC_ROUNDABORT为ON时,在表达式中发生精度损失后会生成错误。 [...] 当试图在具有较低精度的列或变量中存储具有固定精度的值时,会发生精度损失