我看到,使用SQL Server 2005,您可以将参数作为数字传递,例如。
create procedure dbo.TestSP
@Param1 numeric
as
但这等同于什么?例如。数字(10,0),数字(9,2)等?我们这里有一些开发人员使用这个而不是正确的字段定义,该参数将被用于例如而不是使用数字(10,0)作为参数@Param1。
使用Numeric而不是针对表中字段定义的数据类型是否存在任何潜在的性能问题?
非常感谢。
答案 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)