我在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 decimal (精度,小数位数)而不是只放十进制吗?如果是这样的话,我是否需要其他的数字数据类型来指定这种类型的参数编码?
发布于 2009-10-26 20:22:52
是,您需要指定(18,2)作为小数/数字
这同样适用于浮点数/实数,(n)varchar,(n)char,(var)binary,datetime2 (错过了任何?)
不同的精度、小数位数或长度实际上是不同的数据类型,将发生转换。
Example question解释了为什么不同的varchar长度会导致不同的数据类型
发布于 2009-10-26 20:23:36
参数类型必须与数据库列类型匹配。数据库类型不仅由其基类型定义,而且在应用时还由其实际长度和精度定义。在你的例子中,TestDecimal
id实际上是DECIMAL(18,2)
。
https://stackoverflow.com/questions/1627092
复制相似问题