当我试图进行以下从Management Studio中的语句,它成功地执行 -问题与exec语句
exec [sp_GetAllBillsForDate] '03/06/2012','03/06/2012'
但是,当我将其更改为
exec [sp_GetAllBillsForDate] getdate(), getdate()
它生成错误
Incorrect syntax near ')'.
这是怎么回事?
感谢分享你的时间。
当我试图进行以下从Management Studio中的语句,它成功地执行 -问题与exec语句
exec [sp_GetAllBillsForDate] '03/06/2012','03/06/2012'
但是,当我将其更改为
exec [sp_GetAllBillsForDate] getdate(), getdate()
它生成错误
Incorrect syntax near ')'.
这是怎么回事?
感谢分享你的时间。
答案是,你不能将一个函数作为参数传递给存储过程的参数。
如果您只是想在当您不想传入值时使用当前日期/时间,为什么不通过在过程中提供默认值来使这些参数可选?这将使您不必键入它,声明局部变量,甚至更重要的是从客户端应用程序传递无用的令牌。
你还应该避免含糊不清的日期格式,如m/d/y和d/m/y。如果现在不是3月份,我不知道你的意思是3月6日还是6月3日。而当你在不同区域或语言设置的地方运行代码时,SQL Server可能也会错误。以明确的格式(例如YYYYMMDD
)明确说明它不受语言,地区或人类感知问题的影响。
反正这里是带有可选参数的过程:
EXEC dbo.sp_GetAllBillsForDate @date1 = '20120306', @date2 = '20120306';
而获得今天:
ALTER PROCEDURE dbo.sp_GetAllBillsForDate -- sp_ is a horrible prefix, by the way *
@date1 DATETIME = GETDATE(),
@date2 DATETIME = GETDATE()
AS
BEGIN
SET NOCOUNT ON;
...
END
GO
现在的硬编码的日期代码
EXEC dbo.sp_GetAllBillsForDate;
(明确指定参数也是一个好主意,然后你不必担心参数顺序的改变。并且还引用或创建的所有对象时,总是使用模式前缀。)
尝试通过可变..
DECLARE @date1 DATETIME
,@date2 DATETIME
SELECT @date1 = GETDATE()
,@date2 = GETDATE()
EXEC [sp_GetAllBillsForDate] @date1, @date2
感谢阿龙您的快速回复。另一个感谢纠正我和+1为我提供了为什么我不应该使用sp_前缀的原因。 – IrfanRaza 2012-03-06 03:59:26