我在 SQL Server 2000 中有下表:
TABLE_NAME | COLUMN_NAME | TYPE_NAME | PRECISION | LENGTH | SCALE |
test TestID int 10 4 0
test TestDecimal decimal 18 20 2
test TestFloat float 15 8 NULL
test TestMoney money 19 21 4
我的问题是,如果我想创建一个基于我的表字段采用 4 个参数的存储过程,我该怎么做。我有这个解决方案:
CREATE PROCEDURE TestProc ( @TestID int, @TestDecimal decimal, @TestFloat float, @TestMoney money )
AS
.....
.....
.....
GO
这有效,但我认为 @TestDecimal 丢失了小数部分,从而将其转换为整数。我是否需要输入 @TestDecimal 小数(Precision,Scale) 而不仅仅是小数?如果是这样,是否有任何其他数字数据类型需要指定这种类型的参数编码?
最佳答案
是的,您需要为十进制/数字指定 (18,2)
这同样适用于 float/real、(n)varchar、(n)char、(var)binary、datetime2(遗漏了什么?)
不同的精度、小数位数或长度实际上是不同的数据类型,并且会发生转换。
Example question为什么不同的 varchar 长度会产生不同的数据类型
关于sql - T-SQL 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1627092/