布尔值的SQL CASE语句

布尔值的SQL CASE语句,sql,sql-server-2008,stored-procedures,Sql,Sql Server 2008,Stored Procedures,我有以下SQL存储过程 @Text varchar(max), @isArchived varchar(10) SELECT * FROM [Table1] WHERE [StringText] = @ AND [isArchived] = (CASE WHEN @isArchived = 'ALL' THEN ??? WHEN @isArchived = 'Yes' THEN 1 WHEN @isArchived = 'No

我有以下SQL存储过程

@Text varchar(max),
@isArchived varchar(10)

SELECT *
  FROM [Table1] 
  WHERE [StringText] = @ AND [isArchived] = 

  (CASE 
        WHEN @isArchived = 'ALL' THEN ???
        WHEN @isArchived = 'Yes' THEN 1
        WHEN @isArchived = 'No' THEN  0
    END)
我的问题是isArchived是表中的bit类型,在网页上我有一个dropdownlist,其中有三个isArchived值:ALL,Yes,No


对于
Yes
它是1(true),对于
No
它是0(false),但不确定该为此行输入什么:
当@isArchived='ALL'时???
理想情况下,它将完全忽略该行
和[isArchived]=@isArchived
但不确定其语法是什么。

如果您希望在
@isArchived='ALL'
时避免过滤,则可以将
[isArchived]
与自身进行比较(只要值不能为
NULL
):

请注意,这种条件筛选可能会影响您的执行计划,因此您可能需要研究本文中讨论的另一种方法:

谢谢。就是这样:)我想应该没问题,它将被放在SSRS报告中。
SELECT *
FROM [Table1] 
WHERE [StringText] = @Text AND [isArchived] = (
  CASE 
    WHEN @isArchived = 'ALL' THEN [isArchived]
    WHEN @isArchived = 'Yes' THEN 1
    WHEN @isArchived = 'No' THEN  0
  END)