![](/img/trans.png)
[英]SQL Server Stored Procedure with varchar parameter returns wrong results
[英]Stored Procedure with dynamic SQL returns wrong data
對於會計年度參數,我可以選擇2010年,2011年和2012年,但是無論我選擇哪個年份,“提交日期”列仍顯示2011年日期。 例如,如果我選擇2010,則僅顯示在2010年提交的數據,並且所有年份均應如此。 有什么幫助嗎?
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
這里根本不需要動態SQL。
SELECT
...
FROM ...
WHERE FiscalYear=@FiscalYear AND PS.IsActive=1
AND (@SchoolID = -1 OR SchoolID=@SchoolID)
AND ( (@Status = -1)
OR (@Status=1 AND PS.PrivateSchoolID = Ed.PrivateSchoolID)
OR (Ed.PrivateSchoolID is null) )
ORDER BY SchoolName
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.