我在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十进制(精度,比例)而不是十进制吗?如果是这样,是否需要指定此类参数编码的其他数值数据类型?
答案 0 :(得分:5)
是的,您需要为十进制/数字
指定(18,2)这同样适用于float / real,(n)varchar,(n)char,(var)二进制,datetime2(错过任何?)
不同的精度,比例或长度实际上是不同的数据类型,并且会发生转换。
Example question为什么不同的varchar长度会产生不同的数据类型
答案 1 :(得分:0)
您的参数类型必须与数据库列类型匹配。数据库类型不仅由其基类型定义,还在其应用时由其实际长度和精度定义。 <{1}}在您的示例中为id TestDecimal
。