Хранимая процедура с динамическим SQL возвращает неверные данные - PullRequest
0 голосов
/ 01 сентября 2011

Для параметра финансового года у меня есть 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

1 Ответ

6 голосов
/ 01 сентября 2011

Здесь вообще нет необходимости в динамическом 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...