T-SQL参数

时间:2009-10-26 20:16:36

标签: sql sql-server tsql sql-server-2000

我在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十进制(精度,比例)而不是十进制吗?如果是这样,是否需要指定此类参数编码的其他数值数据类型?

2 个答案:

答案 0 :(得分:5)

是的,您需要为十进制/数字

指定(18,2)

这同样适用于float / real,(n)varchar,(n)char,(var)二进制,datetime2(错过任何?)

不同的精度,比例或长度实际上是不同的数据类型,并且会发生转换。

Example question为什么不同的varchar长度会产生不同的数据类型

答案 1 :(得分:0)

您的参数类型必须与数据库列类型匹配。数据库类型不仅由其基类型定义,还在其应用时由其实际长度和精度定义。 <{1}}在您的示例中为id TestDecimal