2013-08-19 21 views
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 
+0

SET NUMERIC_ROUNDABORT ON工作 – Lijo

回答

4

SET NUMERIC_ROUNDABORT

當SET NUMERIC_ROUNDABORT爲ON時,精度的損失之後在表達時將產生誤差。 [...] 當試圖以固定精度將數值存儲在列或精度較低的列中或變量時,會發生精度損失