2014-01-28 115 views
1

我有以下SQL存储过程SQL CASE语句值

@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是位类型的表中,并在网页上我有对的isArchived三个值一个下拉列表:ALL,是的,

号为Yes为1(真),为No为0(假),但不知道要放什么东西在这条线:WHEN @isArchived = 'ALL' THEN ???理想,将完全忽略该行AND [isArchived] = @isArchived但不确定它的语法是什么。

回答

2

如果你想避免过滤时@isArchived = 'ALL',你可以比较[isArchived]本身(只要该值不能NULL):

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) 

注意,这种条件的过滤会影响您的执行计划,所以你可能要在这篇文章中讨论研究了不同的方法:

http://www.sommarskog.se/dyn-search-2008.html

+0

感谢。这样做:)我认为它应该没问题,它将被放置在SSRS报告中。 –