T-SQL 参数
我在 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) 而不仅仅是小数?如果是这样,是否需要任何其他数字数据类型来指定这种类型的参数编码?
I have the following table in 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
My question is, if I wanted to created a stored procedure that takes 4 parameters based on my table fields, how do I do this. I have this solution:
CREATE PROCEDURE TestProc ( @TestID int, @TestDecimal decimal, @TestFloat float, @TestMoney money )
AS
.....
.....
.....
GO
This works, except I think @TestDecimal loses its decimal portion, thus converting it into a whole number. Do I need to put @TestDecimal decimal(Precision,Scale) instead of just decimal? and if so, is there any other numeric datatypes that I need to specify this type of parameter encoding?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
是的,您需要为十进制/数字指定 (18,2)
这同样适用于 float/real、(n)varchar、(n)char、(var)binary、datetime2 (错过了任何一个?)
不同的精度、小数位数或length 实际上是不同的数据类型,并且会发生转换。
示例问题说明为什么 varchar 不同长度产生不同的数据类型
Yes, you need to specifc (18,2) for decimal/numeric
The same applies to float/real, (n)varchar, (n)char, (var)binary, datetime2 (missed any?)
A different precision, scale or length is in effect a different datatype and a conversion will occur.
Example question of why differenmt varchar lengths make different datatypes
您的参数类型必须与数据库列类型匹配。数据库类型不仅由其基本类型定义,而且在适用时还由其实际长度和精度定义。在您的示例中,
TestDecimal
id 实际上是DECIMAL(18,2)
。Your parameter type must match the database column type. A database type is defined not only by its base type, but also by its actual length and precision, when it applies.
TestDecimal
id actualyDECIMAL(18,2)
in your example.