变量作为数字发送到存储过程(SQL Server 2005)

时间:2010-04-09 13:24:39

标签: sql-server sql-server-2005 tsql

我看到,使用SQL Server 2005,您可以将参数作为数字传递,例如。

create procedure dbo.TestSP
 @Param1     numeric
as

但这等同于什么?例如。数字(10,0),数字(9,2)等?我们这里有一些开发人员使用这个而不是正确的字段定义,该参数将被用于例如而不是使用数字(10,0)作为参数@Param1。

使用Numeric而不是针对表中字段定义的数据类型是否存在任何潜在的性能问题?

非常感谢。

4 个答案:

答案 0 :(得分:3)

如果未指定比例或精度,则默认为18.0

  

使用Numeric而不是针对表中字段定义的数据类型是否存在任何潜在的性能问题?

您可能会收到可能会降低查询速度的转换

答案 1 :(得分:2)

根据SQL Server Books Online on MSDN,默认精度为18,默认比例为0,所以

NUMERIC    is equal to   NUMERIC(18,0)

答案 2 :(得分:2)

您的开发人员正在使用糟糕的编程习惯。在定义变量时,总是尽可能地使它与将要使用的字段匹配,并且永远不会无法正确设置定义,否则您可能会得到意想不到的数据截断。 这种数字的使用已经足够糟糕,但他们可能会发现在检查结果时会截断小数。当他们使用varchars执行相同的草率编程时,他们也会得到截断值,但可能不会轻易注意到它们。我会坚持代码审查,他们修复这个垃圾,不再懒惰和无能。

答案 3 :(得分:1)

如上所述,numeric没有numeric(precision,scale)默认为numeric(18,0)

然而,打击那些懒惰的程序员!如果他们真的需要18位使用bigint !!

否则使用适当大小和精度的数据类型:

int, bigint, smallint, and tinyint (Transact-SQL)
decimal and numeric (Transact-SQL)
float and real (Transact-SQL)