繁体   English   中英

SQL Server Express存储过程条件检查

[英]SQL Server Express stored procedure condition checking

我已经写了一个存储过程:

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]=@SupId

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 

怎么做? 任何人都可以帮助我,我们将不胜感激。 提前致谢。

我认为这只是基本逻辑:

where [tblBR].[Active] = 1

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

您在这里不需要控制流语句或类似内容。 您只需要表达备选方案,然后使用布尔运算符将它们链接在一起。

我要做的是以下事情,在您的where子句之后添加以下代码

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

第二个参数,并检查变量是否不同于0,在这种情况下,它将用您的变量过滤超级用户ID;如果等于0,则按其行值对超级用户ID字段进行过滤。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM