0

次の構造とデータを持つ SQL Server 2008 テーブルがあります

INSERT INTO [ProductDetails]([ProductID],[ProductName],[Vendor],[Category])
VALUES(1,'Milk','V1','Food')

INSERT INTO [ProductDetails]([ProductID],[ProductName],[Vendor],[Category])
VALUES(2,'Milk','V2','Food')

INSERT INTO [ProductDetails]([ProductID],[ProductName],[Vendor],[Category])
VALUES(3,'Banana','V2','Food')

次の検索パラメータを使用して、検索条件に論理 OR を適用したい

DECLARE @ProductName VARCHAR(10)
DECLARE @Vendor VARCHAR(10)

さまざまなシナリオで期待される結果を以下に示します。

---CASE 1
SET @ProductName = NULL
SET @Vendor = NULL
--Expected ProductID = 1,2,3

---CASE 2
SET @ProductName = 'Milk'
SET @Vendor = 'V2'
--Expected ProductID = 1,2,3

---CASE 3
SET @ProductName = NULL
SET @Vendor = 'V2'
--Expected ProductID = 2,3

---CASE 3
SET @ProductName = 'Banana'
SET @Vendor = NULL
--Expected ProductID = 3

---CASE 5
SET @ProductName = 'Banana'
SET @Vendor = 'V2'
--Expected ProductID = 2,3

今考えられる唯一の解決策は、次のように個別のクエリを実行することです。

  1. @ProductNameとの両方@VendorNULLの場合、すべての製品を選択します

  2. IF@ProductName@Vendorが null でない場合、2 つの選択クエリ (値に基づく@ProductNameクエリと値に基づくクエリ@Vendor)の和集合を作成します。

  3. IF @ProductNameis NOT nulland @Vendoris 、値NULLに基づいてクエリ結果を選択@ProductName

  4. IF@ProductNameが null で@VendorありNOT null、値に基づいてクエリ結果を選択します@Vendor

論理 AND の場合のように、1 つのクエリで実行できるより良い解決策はありますか?

参照:

  1. データベース テーブルに対する複数のオプション パラメーターを使用した検索機能の実装
4

2 に答える 2

0

あなたはこれを行うことができます:

where (@ProductName IS NULL AND @Vendor IS NULL)
   OR (@ProductName IS NOT NULL AND ProductName=@ProductName)
   OR (@Vendor IS NOT NULL AND Vendor=@Vendor)
于 2013-06-21T15:01:50.567 に答える