2017-03-14 66 views
2

工作,我有參數的存儲過程:存儲過程日期參數不投

CREATE PROCEDURE [dbo].[sp_SCOPRO_HLP] (       
    @dDateFrom DATE = NULL 
, @dDateTo DATE = NULL       
) 
AS 
-- rest of procedure 

我的問題是,爲什麼這是工作:

EXEC sp_SCOPRO_HLP 
    @dDateFrom = '2017-01-01' 
, @dDateTo = '2017-01-31' 

,但是這是不工作(它gaves我語法錯誤):

EXEC sp_SCOPRO_HLP 
    @dDateFrom = cast('2017-01-01' as date) 
, @dDateTo = cast('2017-01-31' as date) 

語法錯誤:

enter image description here

+4

你不能通話功能。準備參數,然後執行EXEC。最好不要用'sp_'來加前綴。 –

+1

您不能通過調用'execute'語句中的函數將值賦給變量。旁註 - 命名用戶sprocs與'sp_'是一個壞主意 – Raj

+0

@Raj - 也許你有任何鏈接到該規則? – FrenkyB

回答

3

按照與https://connect.microsoft.com/SQLServer/feedback/details/352110/t-sql-use-scalar-functions-as-stored-procedure-parameters

無法使用的功能參數等。

SQL社區的所有成員都會同意可接受的形式應該是 - 代碼少,可讀性好。

所以,你能做的最好的是:在exec語句

DECLARE @dateFromDate = cast('2017-01-01' as date) 
DECLARE @dateFromTo = cast('2017-01-31' as date) 

EXEC sp_SCOPRO_HLP 
    @dDateFrom = @dateFromDate 
, @dDateTo = @dateFromTo