在CASE THEN子句+通配符中搜索uniqueidentifier

时间:2011-01-03 09:23:22

标签: tsql sql-server-2008

尽管经过一番认真的搜索,我似乎无法找到任何关于此的信息。如果我错过了之前关于此事的帖子,我很抱歉。

无论如何,我问我的数据库(sql server 2008)是否有一个uniqueidentifier作为参数。但是,如果输入参数为null,我希望所有帖子都返回。我会尝试在代码中显示它,也许这样更容易获得要点:

select * from ongoing_tbl_ongoing where ongoingState like
    case when @inParameter is null then 
        '%'              --This is where things go haywire
    else
        @inParameter     --This is a uniqueidentifier type (Guid)
    end
    or ongoingState is null    

但是这很失败(从字符串转换为uniqueidentifier时转换失败。)

有趣的是......以下代码有效:

select * from ongoing_tbl_ongoing where ongoingState like '%'

似乎CASE条款迫使演员或以其他方式阻止我对uniqueidentifier进行通配符搜索。任何指针都将受到高度赞赏。如果您想了解更多信息,请告诉我。

最诚挚的问候 -K

2 个答案:

答案 0 :(得分:0)

问题是'%'@inParameter必须具有相同的数据类型。您可以将@inParameter转换为VARCHAR或使用此查询吗?

SELECT *
FROM ongoing_tbl_ongoing
WHERE ongoingState IS NULL OR
      @inParameter IS NULL OR
      ongoingState LIKE @inParameter

答案 1 :(得分:0)

如果您想使用案例陈述

select *    
from     
  ongoing_tbl_ongoing     
where     
  ongoingState is null     
or    
  ongoingState =    
    case when @inParameter is null then ongoingState
    else         @inParameter   
    end