當我試圖進行以下從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