2011-09-01 76 views
0

對於會計年度參數,我有2010年,2011年和2012年作爲選項,但無論選擇哪一年,我選擇「提交日期」列仍顯示2011年日期。我想舉個例子,如果我選擇2010年,只有在2010年提交的數據應該顯示,並且同樣是所有年份。任何幫助?使用動態SQL存儲過程返回錯誤數據

set @sqlstr = ' 
    Select 
    [SchoolName] As [School Name], 
    Status= CASE WHEN PS.PrivateSchoolID = Ed.PrivateSchoolID THEN ''Submitted'' 
     ELSE ''Not Submitted''END, 
    [Submitted By]= CASE WHEN PS.PrivateSchoolID = Ed.PrivateSchoolID 
      THEN [FirstName] + '' '' + [LastName] ELSE NULL END, 
    [Submitted On]= CASE WHEN PS.PrivateSchoolID = Ed.PrivateSchoolID 
       THEN Convert(Varchar(10), Ed.CreatedDate, 101) ELSE NULL END 
    From EnrollmentDateSchool Ed Right Outer Join 
    (select FP.FiscalYear, PrivateSchool.* from PrivateSchool 
     INNER JOIN FiscalYearPrivateSchool FP 
       ON PrivateSchool.PrivateSchoolID = FP.PrivateSchoolID) PS 
      ON Ed.PrivateSchoolID = PS.PrivateSchoolID Left Outer Join 
    Finance.dbo.Person P ON Ed.CreatedBy = P.PersonID 
    Where (FiscalYear = '+convert(varchar, @FiscalYear)+') AND (PS.IsActive = 1)' 


IF (@SchoolID != -1) 
    set @sqlstr = @sqlstr + ' AND SchoolID ='+ convert(varchar, @SchoolID) 

IF (@Status = -1) 
    set @sqlstr = @sqlstr + ' AND (PS.PrivateSchoolID = PS.PrivateSchoolID' + ')' 
ELSE IF (@Status = 1) 
    set @sqlstr = @sqlstr + ' AND (PS.PrivateSchoolID = Ed.PrivateSchoolID' + ')' 
ELSE 
    set @sqlstr = @sqlstr + 'AND (Ed.PrivateSchoolID is null' + ')' 

    SET @sqlstr = @sqlstr + 'ORDER BY SchoolName' 
EXEC(@sqlstr) 
END 
+2

當您使用'PRINT @sqlstr;'而不是'EXEC(@sqlstr)'時,您能顯示輸出嗎? –

+1

另外,不要使用'CONVERT(VARCHAR,'沒有長度,爲什麼?http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-沒有length.aspx –

回答

6

這裏根本沒有必要動態sql。

SELECT 
    ... 
FROM ... 
WHERE [email protected] AND PS.IsActive=1 
AND (@SchoolID = -1 OR [email protected]) 
AND ((@Status = -1) 
     OR (@Status=1 AND PS.PrivateSchoolID = Ed.PrivateSchoolID) 
     OR (Ed.PrivateSchoolID is null)) 
ORDER BY SchoolName 
+4

+1我剛剛發佈了一些非常相似的東西,動態SQL只是爲了構建一個'WHERE'子句讓寶寶耶穌哭泣 – Yuck

+0

我也在發佈類似的東西,花費太多的時間格式化部分遺漏...) –

+0

感謝編輯Aaron。 – Jamiec