2011-11-25 19 views
1

這是我寫入存儲過程的第一步。我試圖獲取兩個日期之間所有訂單的清單。我會每月運行此過程,獲得最後6個月的訂單。如果我在本月的2號或15號運行它,它仍然需要從前一個月末的前6個月。第一個存儲過程 - 無法變量工作

下面的代碼:

CREATE PROCEDURE pMonthlyCustomerReport 
    -- Get the last day of the previous month and the first day of 6 months ago 
    @enddate date, 
    @startdate date 
AS 
    SET @enddate = DATEADD(D,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)); 
    SET @startdate = DATEADD(M, DATEDIFF(MONTH, 0, GETDATE())-6, 0); 

    -- Get orders for the past 6 months 
    SELECT acct_num, date as OrderDate, type as OrderType 
    INTO #Orders 
    FROM rders 
    WHERE date BETWEEN @startdate AND @enddate; 

當我運行PROC,我得到這個錯誤信息:

過程或函數 'pMonthlyCustomerReport' 需要參數 '@EndDate',但未提供。

我應該在這裏使用的任何建議或最佳做法?我可能會過度考慮創建@enddate,@startdate,並且應該將它們放入查詢中,但我想先聲明變量。

有什麼想法?

感謝

回答

2

你可以只聲明瓦爾@startdate和@EndDate,而不是把參數給SP,因爲你是基於當前日期反正它們設置:

DECLARE @startdate datetime 
DECLARE @enddate datetime 

然後聲明它是這樣的:

CREATE PROCEDURE pMonthlyCustomerReport 
AS 
0

您正在詢問參數,使用declare語句將@enddate和@startdate更改爲局部變量。

1

declare @enddate date 
declare @startdate date 

AS 

所以他們不聲明爲具有調用程序時必須提供的參數後。

2

這裏有兩個問題。第一個是你聲明輸入參數,你沒有提供價值(這顯然不是你的意圖)。解決方法:將它們放在AS之後,並使用DECLARE將它們聲明爲局部變量。

第二個問題是您正試圖設置聲明的輸入參數的值。第一次更改將解決此問題。