SQL Server:无法保存小数位数
我面临一个奇特的问题。我在SQL Server中有几个表,其中我正确地将几列称为 DECIMAL(18,2)
。
不幸的是,每当我在这些列中保存任何值时,值的右侧值不会存储或将其四舍五入为较高的倍数,而该值的值则是00的右侧值。
我通过我已经为相关参数声明了此类列的小数数据类型的存储过程。
有什么问题?
编辑:发布表脚本
CREATE TABLE [dbo].[ItemMaster]
(
[ColIndex] [int] IDENTITY(1,1) NOT NULL,
[ItemName] [nvarchar](150) NULL,
[ItemBrand] [int] NULL,
[ItemHSN] [nvarchar](50) NULL,
[ItemSalePrice] [decimal](18, 2) NULL,
[ItemCode] [nvarchar](50) NULL,
[ItemBarcode] [nvarchar](max) NULL,
[ItemQRCode] [nvarchar](max) NULL,
[ItemUnit] [int] NULL,
[ItemOpeningStock] [int] NULL,
[ItemCreationDate] [datetime] NULL,
[ItemEditDate] [datetime] NULL,
[ItemCreationUserID] [int] NULL,
[ItemEditUserID] [int] NULL,
[ItemActiveStatus] [int] NULL,
[PurCGST] [decimal](10, 3) NULL,
[PurSGST] [decimal](10, 3) NULL,
[PurIGST] [decimal](10, 3) NULL,
[SaleCGST] [decimal](10, 3) NULL,
[SaleSGST] [decimal](10, 3) NULL,
[SaleIGST] [decimal](10, 3) NULL,
[ItemCat] [int] NULL,
[RandomString] [nvarchar](50) NULL,
CONSTRAINT [PK_ItemMaster]
PRIMARY KEY CLUSTERED ([ColIndex] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
存储过程:
CREATE OR ALTER PROCEDURE [dbo].[EditItem]
@ItemColID BIGINT,
@ItemName NVARCHAR(150),
@ItemBrandNum INT,
@ItemHSN NVARCHAR (150),
@SalePrice DECIMAL,
@ItemCode NVARCHAR(150),
@ItemBarcode NVARCHAR(500),
@ItemQRCode NVARCHAR(500),
@ItemUnitNum INT,
@ItemOpeningStock INT,
-- @ItemCreateDate DATETIME,
@ItemEditDate DATETIME,
-- @ItemCreateUserID INT,
@ItemEditUserID INT,
@ItemActiveStatus INT,
-- @PurCGSTRate DECIMAL,
-- @PurSGSTRate DECIMAL,
-- @PurIGSTRate DECIMAL,
@SaleCGSTRate DECIMAL,
@SaleSGSTRate DECIMAL,
@SaleIGSTRate DECIMAL,
@ItemCat INT
AS
BEGIN
SET NOCOUNT ON;
UPDATE ItemMaster
SET ItemName = @ItemName ,
ItemBrand = @ItemBrandNum,
ItemHSN = @ItemHSN,
ItemSalePrice = @SalePrice,
ItemCode = @ItemCode,
ItemBarcode = @ItemBarcode ,
ItemQRCode = @ItemQRCode ,
ItemUnit = @ItemUnitNum ,
ItemOpeningStock= @ItemOpeningStock ,
-- @ItemCreateDate
ItemEditDate = @ItemEditDate ,
-- @ItemCreateUserID
ItemEditUserID = @ItemEditUserID ,
ItemActiveStatus = @ItemActiveStatus,
-- purcgst=@PurCGSTRate ,
--pursgst=@PurSGSTRate ,
--purigst=@PurIGSTRate,
salecgst= @SaleCGSTRate ,
SaleSGST = @SaleSGSTRate ,
saleigst= @SaleIGSTRate,
itemcat = @ItemCat
WHERE ItemMaster .ColIndex = @ItemColID
END
GO
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
类型
的参数十进制
等于小数(18,0)
:这是没有小数点后的任何数字!
对于数据类型,您还需要明确 - 对于参数也是如此!
因此,您需要使用
十进制(18,2)
作为存储过程参数的数据类型 - 然后您将能够存储分数小数值的值!请参阅 SQL Server中的
DECIMAL
上的官方MS文档有关更多详细信息。这是来自官方文档(我的重点):
Parameter of type
DECIMAL
is equal toDECIMAL(18,0)
:This is WITHOUT any digits after the decimal point!!
You need to be explicit about your datatype - for the parameters as well !
So you need to use
DECIMAL(18,2)
as the datatype for your stored procedure parameters - THEN you will be able to store fractional decimal values just fine!See the official MS documentation on
DECIMAL
in SQL Server for more details.This is from the official docs (my highlights):