Sql server 2005 exec声明的问题
当我试图从ManagementStudio执行以下语句时,它已成功执行-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
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;
(显式命名参数也是一个好主意。这样您就不必担心参数顺序的变化。并且在引用或创建所有对象时始终使用架构前缀。)
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;
(显式命名参数也是一个好主意。这样您就不必担心参数顺序的变化。并且在引用或创建所有对象时始终使用架构前缀。)