2013-11-11 2 views
0

Я написал хранимую процедуру:SQL Server Express хранимая процедура условие проверка

ALTER PROCEDURE [dbo].[GetBRs_Pager] 
    @PageIndex INT 
    ,@PageSize INT 
    ,@SupId INT 
    ,@RecordCount INT OUTPUT 
AS 
BEGIN 

SET NOCOUNT ON; 

SELECT ROW_NUMBER() 
OVER (
    ORDER BY [tblBR].[ID] ASC 
) AS RowNumber 

,[tblBR].[ID] 
,[tblBR].[BRName] 
,[tblBR].[SupervisorId] 
,[tblSupervisor].[SupervisorName] 
,[tblBR].[BRCode] 
,[tblBR].[BRMobile] 
,[tblBR].[BRTypeId] 
,[tblType].[TypeName] 
,[tblBR].[BRImageUrl] 

INTO #Results 
FROM [tblBR] 

    INNER JOIN [tblType] 
    ON [tblBR].[BRTypeId] = [tblType].[ID] 

    INNER JOIN [tblSupervisor] 
    ON [tblBR].[SupervisorId] = [tblSupervisor].[ID] 


where [tblBR].[Active] = 1 
and [tblBR].[SupervisorId][email protected] 

SELECT @RecordCount = COUNT(*) 

FROM #Results 

SELECT * FROM #Results 

WHERE RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1 

DROP TABLE #Results 

END 

Теперь я хочу изменить запрос следующим образом

if(@supId != 0) then where [tblBR].[Active] = 1 
and [tblBR].[SupervisorId] = @SupId else [tblBR].[Active] = 1 

Как это сделать? Мне всем очень помогает. Заранее спасибо.

ответ

0

Что бы я сделать, это следующее дело, добавив следующий код после того, как вашего ИНЕК

AND [tblBR].[Active] = 1 
AND [tblBR].[SupervisorId] = CASE WHEN @supId != 0 THEN @supId ELSE [tblBR].[SupervisorId] END 

второго и проверить, если переменные, если она отличается от 0, в этом случае выбирать SupervisorID с переменным , если он равен 0, он фильтрует поле supervisorid значением его строки.

1

Просто основная логика, я думаю:

where [tblBR].[Active] = 1 

and (
     [tblBR].[SupervisorId][email protected] or 
     @SupId = 0 
    ) 

Вам не нужно операторы управления потоком и т.п. здесь. Вам просто нужно выразить альтернативы и связать их вместе с помощью булевых операторов.

Смежные вопросы