sql - T-SQL 参数

标签 sql sql-server t-sql 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 小数(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/

相关文章:

sql-server - TSQL临时过程: There is already an object named

mysql - 不知道如何合并两个MySQL表

sql - PL/pgSQL 触发器阻止一条河流穿越另一条河流

php - MySQL 透视将行变成列

sql - 如何删除一个表中所有在另一个表中有相应记录的记录

sql - 如何在 Sql Server 中将序列类型从 int 更改为 bigint

sql-server - SQL Server 范围锁竞争条件问题

mysql - 仅从两个实体中获取匹配的记录

sql-server - ssis 中的意外终止错误

sql-server - 请注意,文档的某些部分可能包含文档检查器无法删除的个人信息