2017-12-09 18 views
-1

Webサイトでクエリフォームを作成しようとしています。最初のオブジェクトは演算子を含むドロップダウンリストです。ドロップダウンリストのデフォルトの最初の値はNULL(1)、2番目の値はLIKE(2)など... 2番目のオブジェクトは、ユーザーが "A"のような文字列を入力できるテキストボックスです。SQL ServerのWHERE句でCASE文を使用

したがって、以下のSQLクエリを作成して、Webサイトからの変数をシミュレートしようとしています。実行し、@op = 1がすべての値を返します。しかし、私は@op = 2を変更する場合は、次のエラーを取得維持:データ型intにnvarchar型の値「%LIKEトム」に変換する際

変換に失敗しました「

DECLARE @StartDate DATETIME2(7) = '2017-11-08 00:00:00.0000000 +00:00' 
DECLARE @EndDate DATETIME2(7) = '2017-11-08 00:00:00.0000000 +00:00' 
DECLARE @Op INT = 2 
DECLARE @name NVARCHAR(25) = 'A' 
SELECT 
    name, 
    dttm 
FROM 
    tableName 
WHERE 
    dttm BETWEEN @StartDate AND @EndDate 
    AND CASE @Op 
     WHEN 1 THEN 1 
     WHEN 2 THEN name + ' LIKE ' + @name +'%' 
     END <> 0 

答えて

0

使用しないでください。 。case普通のブール論理を使用します。

WHERE dttm BETWEEN @StartDate AND @EndDate AND 
     ((@op = 1) OR 
     (@op = 2 AND name LIKE @name + '%') 
    ) 

あなたの特定の問題は、文字列内のLIKE比較を構築する必要。しかし、上記はあなたがしたいことであるようです。