为什么我的十进制值在SQL插入中舍入为整数?

Ada*_*ler 14 sql sql-server ssms rounding

我正在使用SQL Server Management Studio并具有以下架构:

CREATE TABLE tmp(
    id int NOT NULL IDENTITY(1,1)PRIMARY KEY,
    toleranceRegion DECIMAL
)
Run Code Online (Sandbox Code Playgroud)

然后我执行以下插入:

INSERT INTO tmp VALUES(3.2); 
INSERT INTO tmp VALUES(5.678);
INSERT INTO tmp VALUES(1.95);
Run Code Online (Sandbox Code Playgroud)

预期产量:

id  toleranceRegion
--  ---------------
1   3.2
2   5.678
3   1.95
Run Code Online (Sandbox Code Playgroud)

实际产量:

id  toleranceRegion
--  ---------------
1   3
2   6
3   2
Run Code Online (Sandbox Code Playgroud)

为什么插入的toleranceRegion值被舍入为最接近的整数?

Igo*_*gor 14

您没有为小数定义比例/精度.如果您想要小数点后的3位数,则应将其定义为DECIMAL(9,3),这将给出小数点前6位和小数最多3位.您需要分析预期数据,并根据预期指定列定义的正确精度和比例.

CREATE TABLE tmp(
    id int NOT NULL IDENTITY(1,1)PRIMARY KEY,
    toleranceRegion DECIMAL(9,3)
)
Run Code Online (Sandbox Code Playgroud)

请参阅Sql Server文档中的decimal.