Sql server 2005 exec声明的问题

Sql server 2005 exec声明的问题,sql-server-2005,ssms,Sql Server 2005,Ssms,当我试图从ManagementStudio执行以下语句时,它已成功执行- exec [sp_GetAllBillsForDate] '03/06/2012','03/06/2012' 但是当我把它改成 exec [sp_GetAllBillsForDate] getdate(), getdate() 它正在产生错误 Incorrect syntax near ')'. 这有什么问题 谢谢分享您的时间。尝试传递变量 DECLARE @date1 DATETIME ,@dat

当我试图从ManagementStudio执行以下语句时,它已成功执行-

exec [sp_GetAllBillsForDate] '03/06/2012','03/06/2012'

但是当我把它改成

exec [sp_GetAllBillsForDate] getdate(), getdate()

它正在产生错误

Incorrect syntax near ')'.
这有什么问题


谢谢分享您的时间。

尝试传递变量

DECLARE @date1 DATETIME
       ,@date2 DATETIME

SELECT @date1 = GETDATE()
      ,@date2 = GETDATE()

EXEC [sp_GetAllBillsForDate] @date1, @date2

尝试传递变量

DECLARE @date1 DATETIME
       ,@date2 DATETIME

SELECT @date1 = GETDATE()
      ,@date2 = GETDATE()

EXEC [sp_GetAllBillsForDate] @date1, @date2

答案是不能将函数作为参数传递给存储过程参数

如果您只是想在不想传入值的情况下使用当前日期/时间,为什么不在过程中提供默认值,使这些参数成为可选参数?这将使您不必键入它、声明局部变量,更重要的是,不必从客户端应用程序传递那些无用的令牌

您还应该避免不明确的日期格式,如m/d/y和d/m/y。如果现在不是三月,我不知道你指的是三月六日还是六月三日。当您使用不同的区域或语言设置在某处运行代码时,SQL Server也可能会出错。以清晰的格式(例如,
yyyyymmdd
)明确陈述,不受语言、区域或人类感知问题的影响

无论如何,以下是带有可选参数的过程:

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 @date1 = '20120306', @date2 = '20120306';
为了得到今天:

EXEC dbo.sp_GetAllBillsForDate;
(显式命名参数也是一个好主意。这样您就不必担心参数顺序的变化。并且在引用或创建所有对象时始终使用架构前缀。)


答案是不能将函数作为参数传递给存储过程参数

如果您只是想在不想传入值的情况下使用当前日期/时间,为什么不在过程中提供默认值,使这些参数成为可选参数?这将使您不必键入它、声明局部变量,更重要的是,不必从客户端应用程序传递那些无用的令牌

您还应该避免不明确的日期格式,如m/d/y和d/m/y。如果现在不是三月,我不知道你指的是三月六日还是六月三日。当您使用不同的区域或语言设置在某处运行代码时,SQL Server也可能会出错。以清晰的格式(例如,
yyyyymmdd
)明确陈述,不受语言、区域或人类感知问题的影响

无论如何,以下是带有可选参数的过程:

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 @date1 = '20120306', @date2 = '20120306';
为了得到今天:

EXEC dbo.sp_GetAllBillsForDate;
(显式命名参数也是一个好主意。这样您就不必担心参数顺序的变化。并且在引用或创建所有对象时始终使用架构前缀。)


感谢Aaron的快速回复。再次感谢您纠正我的错误,+1为我提供了不应该使用sp_uuu前缀的原因。感谢Aaron的快速回复。再次感谢您纠正我的错误,并感谢+1为我提供了不应使用sp_uu前缀的原因。