4

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

1 回答 1

4

看看SET NUMERIC_ROUNDABORT

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

于 2013-08-19T12:14:28.977 回答