3

ケース内のケースを使用して、tsql で select ステートメントを実行しようとしています。まず、SearchField の内容に基づいています。次に、SearchOper に基づいて実行する必要があります。

    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 ステートメント内で選択を行うことに注意してください。

キーワード「case」の近くで不正な構文というメッセージが表示されます。

4

4 に答える 4

5

あなたの例に基づいて、おそらくIFステートメントを使用したいと思うでしょう(これはELSEの例ですが、IFとELSE IFを複数回使用することもできます):

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)。

于 2012-10-09T02:30:59.627 に答える
1
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)

それはそれを書く1つの方法であり、うまくいくはずです。あなたが持っているのはwww.sommarskog.se/dyn-search.htmlの変種ですが、OPTION (RECOMPILE)それでも毎回最適な計画を生成するはずです.

于 2012-10-09T02:50:44.873 に答える