在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>
答案 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