DECIMAL 值自行转换为 INT + 1

0 sql sql-server int decimal sql-insert

我有一个 C# 应用程序,用户可以在其中填写表单以将产品存储在 SQL Server 数据库中。

问题是每次存储产品(通过用户填写表单)时,价格(小数)都会自动转换为int并添加 1。

我最初认为这是应用程序的问题,但是,注册过程非常简单,我没有在那里发现任何错误,所以我直接从 SQL Server 插入了一行并且问题出现了,所以这告诉我问题是在 SQL Server 中,而不是在应用程序中

执行

insert into product (code, description, unit_price, stock, category_code)
values (7, 'Window Cleaner', 20.50, 20, 3)
Run Code Online (Sandbox Code Playgroud)

结果价格为 21。

这是表定义

CODE INT NOT NULL,
DESCRIPTION VARCHAR(30) NOT NULL,
UNIT_PRICE DECIMAL NOT NULL,
STOCK INT NOT NULL,
CATEGORY_CODE INT NOT NULL
CONSTRAINT PK_PRODUCT PRIMARY KEY(CODE),
CONSTRAINT FK_CATEGORY_CODE FOREIGN KEY (CATEGORY_CODE) REFERENCES Category(CODE),
CONSTRAINT PRODUCT_POSITIVE_VALUES CHECK(UNIT_PRICE > 0 AND CODE >= 0 AND STOCK >= 0)
Run Code Online (Sandbox Code Playgroud)

Dal*_*e K 5

您已使用以下内容来定义您的列:

UNIT_PRICE DECIMAL NOT NULL
Run Code Online (Sandbox Code Playgroud)

这没有精度和小数位数,因此将使用默认精度 (18) 和小数位数 (0)。默认的 0 比例实际上是一个int. 因此,当您插入/更新值时,该值将四舍五入为int. 为了解决您的问题,请以正确的精度和比例定义您的列,例如

UNIT_PRICE DECIMAL(9,2) NOT NULL
Run Code Online (Sandbox Code Playgroud)

参考