4

テーブルに[BRKTFRT1] [decimal](7, 4) 列があり@MyTableます。

値を挿入しようとすると、列に34.1234555正常に挿入34.1235されます。実際には、この丸めを防止し、そのような丸めが必要になった場合はエラーを発生させる必要があります。どうすればそのような制約を追加できますか?

注: 1 つのアイデアは、入力文字列の長さをチェックすることです。しかし、開発者がこの制約を見逃さないように、これを 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 に答える