布尔值的SQL CASE语句
我有以下SQL存储过程布尔值的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
@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)