SQL:如何根据参数显示/隐藏非活动用户

时间:2018-05-31 18:10:34

标签: sql sql-server

在sql server中,我有一个简单的查询返回所有用户,包括active和amp;无效。我需要更新我的查询以向用户提供显示或隐藏非活动用户的选项。该用户的值将通过名为“@ShowInactiveUsers”(BIT)的参数传入。我有几种方法可以做到这一点,但我正在寻找最好的方法来设置它。因此,在我的下面的查询中,设置我的WHERE子句的最佳方法是什么,如果ShowInactiveUsers = false,那么只显示Active = 1的结果。但是如果ShowInactiveUsers = true,那么显示所有结果?

DECLARE @ShowInactiveUsers bit = 1

 SELECT UserId
        , UserName
        , FullName
        , Active
 FROM Users
 WHERE
    <insert active/inactive where clause here>

2 个答案:

答案 0 :(得分:2)

@ShowInactiveUsers = 1 OR Active = 1
对于@ShowInactiveUsers = 1时的任何行,

都为true;对于Active = 1@ShowInactiveUsers = 0的行,

为真。

但最好是与你的标准相关。

答案 1 :(得分:1)

您还可以在过程中使用动态SQL来构建查询,具体取决于您传递给过程的参数值。

它看起来像这样:

DECLARE @ShowInactiveUsers BIT = NULL
DECLARE @SQL NVARCHAR(MAX), @Where NVARCHAR(MAX) 
SET @SQL = 'SELECT UserId
        , UserName
        , FullName
        , Active
 FROM Users WHERE 1=1'

IF (@ShowInactiveUsers = 0) /*means do not show inactive users and show only active users*/
BEGIN
    SET @Where = ' AND Active = 1'
    SET @SQL = @SQL + @Where
END 
PRINT @SQL

EXEC sp_executesql @SQL