2016-06-23 18 views
1

条件に基づいて検索を実行する必要があります。私は@SearchConditionを渡した場合= 1、私は@SearchCondition = 0を渡した場合、検索は、渡された@SearchValueため受注コード列に対して実行されなければならないすべてのレコードマイナス 条件文中の条件を使用したSQL検索

IF @SearchCondition = 1 
    Search Records With [OrderId] = @SearchValue 

IF @SearchCondition = 0 
    Get All The Records With [OrderId] <> @SearchValue 

しかし@SearchValue

でレコードを返す必要があります検索1つのステートメント(理想的には CASEステートメント)で行う必要があります。いいえ IF-ELSEクエリは大きすぎるので、私は同じ長いクエリを2回書くのではなく、1つの異なる行だけを書いています。ここでは便宜のためのサンプルテーブルには、次のとおりです。

DECLARE @SearchCondition INT = 0, @SearchValue INT = 121 
CREATE TABLE #TempData 
(
[Id] INT IDENTITY(1,1), 
[OrderId] INT, 
[OrderName] VARCHAR(20) 
) 
INSERT INTO #TempData 
SELECT 121, 'A1' UNION 
SELECT 122, 'A2' UNION 
SELECT 123, 'A3' UNION 
SELECT 124, 'A4' UNION 
SELECT 125, 'A5' UNION 
SELECT 126, 'A6' UNION 
SELECT 127, 'A7' UNION 
SELECT 128, 'A8' UNION 
SELECT 129, 'A9' UNION 
SELECT 130, 'A10' 

--If SearchCondition = 1 
SELECT [Id], [OrderId], [OrderName] 
FROM #TempData 
WHERE [OrderId] = @SearchValue--If SearchCondition = 1 
-- Handle If SearchCondition = 0 
--SELECT [Id], [OrderId], [OrderName] 
--FROM #TempData 
--WHERE [OrderId] <> @SearchValue 

DROP TABLE #TempData 

は、上記の文をマージする必要があり、単一のステートメントで

+2

使用および/または代わりにcase式の:一つの方法は、AND-OR組み合わせ

SELECT [Id], [OrderId], [OrderName] FROM #TempData WHERE (@SearchCondition = 1 AND [OrderId] = @SearchValue) OR (@SearchCondition = 0 AND [OrderId] <> @SearchValue) 

その他の情報を使用することです。 – jarlh

+0

動的クエリ – Lucky

答えて

0
WHERE ([OrderId] = 
case when @SearchCondition=1 then @SearchValue end) 
or ([OrderId] <> 
case when @SearchCondition=0 then @SearchValue end)