首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >案例中的TSql案例

案例中的TSql案例
EN

Stack Overflow用户
提问于 2012-10-09 10:21:16
回答 4查看 11.3K关注 0票数 3

我正在尝试使用case中的case在tsql中执行select语句。首先是基于什么是SearchField。接下来,我需要基于SearchOper来做这件事。

代码语言:javascript
复制
    declare @searchField varchar(50)  
    declare @searchString varchar(50)
    declare @searchOper varchar(50)

    case @searchField
     when 'CompanyName' then
        case @searchOper
          when 'eq' then
            select * from tbl1 where CompanyName = @searchString
         when 'ne' then 
           select * from tbl1 where CompanyName <> @searchString
         end
     when 'StoreNum' then
        case @searchOper
          when 'eq' then
             select * from tbl1 where StoreNum = @searchString
          when  'ne' then
             select * from tbl1 where StoreNum <> @searchString
        end 
     end 

注意,我要做的是在case语句中执行select。

我收到一条消息,说关键字'case‘附近的语法不正确。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-09 10:31:00

根据您的示例,您可能希望使用IF语句(这里是一个带有ELSE的示例,但您也可以多次使用IF和ELSE IF ):

代码语言:javascript
复制
declare @searchField varchar(50)  
declare @searchString varchar(50)
declare @searchOper varchar(50)

IF @searchField='CompanyName'
BEGIN
    IF @searchOper='eq'
    BEGIN
        select * from tbl1 where CompanyName = @searchString
    END
    ELSE
    BEGIN
        select * from tbl1 where CompanyName <> @searchString
    END
END
ELSE 
BEGIN
    IF @searchOper='eq'
    BEGIN
        select * from tbl1 where StoreNum = @searchString
    END
    ELSE
        select * from tbl1 where StoreNum <> @searchString
    END
END

CASE非常类似,但更倾向于与内联语句一起使用(例如,SELECT CASE 1=1 THEN 'a‘ELSE 'b’END)。

票数 5
EN

Stack Overflow用户

发布于 2012-10-09 10:50:45

代码语言:javascript
复制
declare @searchField varchar(50)  
declare @searchString varchar(50)
declare @searchOper varchar(50)

 select *
 from tbl1
 where (@searchField <> 'companyName'
       or
       @searchOper = 'eq' and CompanyName = @searchString
       or
       @searchOper = 'ne' and CompanyName <> @searchString)
   AND (@searchField <> 'StoreNum'
       or
       @searchOper = 'eq' and CompanyName = @searchString
       or
       @searchOper = 'ne' and CompanyName <> @searchString)
 option (recompile)

这是一种编写它的方法,它应该执行得很好。您拥有的是www.sommarskog.se/dyn-search.html的一个变体,但是OPTION (RECOMPILE)每次都应该生成一个最优计划。

票数 1
EN

Stack Overflow用户

发布于 2012-10-09 14:26:03

代码语言:javascript
复制
declare @searchField varchar(50)  
declare @searchString varchar(50)
declare @searchOper varchar(50)

SELECT
    (case @searchField
     when 'CompanyName' then
        (case @searchOper
          when 'eq' then
            (select * from tbl1 where CompanyName = @searchString)
         when 'ne' then 
           (select * from tbl1 where CompanyName <> @searchString)
         end
         )
     when 'StoreNum' then
        (case @searchOper
          when 'eq' then
             (select * from tbl1 where StoreNum = @searchString)
          when  'ne' then
            ( select * from tbl1 where StoreNum <> @searchString)
        end 
        )
     end 
) a

我懒得构建tbl1,改成getdate吧

代码语言:javascript
复制
declare @searchField varchar(50)  
declare @searchString varchar(50)
declare @searchOper varchar(50)

SET @searchField = 'CompanyName'
SET @searchOper = 'eq'
SELECT
    (case @searchField
     when 'CompanyName' then
        (case @searchOper
          when 'eq' then
            (select getdate())
         when 'ne' then 
           (select getdate())
         end
         )
     when 'StoreNum' then
        (case @searchOper
          when 'eq' then
             (select getdate())
          when  'ne' then
            ( select getdate())
        end 
        )
     end 
) a
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12792020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档