我有一個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')
我想申請邏輯或與下面的搜索我的搜索標準參數
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
現在我能想到的唯一解決方案是運行單獨的查詢,如下所示。
如果同時
@ProductName
和@Vendor
是NULL
,選擇所有產品IF
@ProductName
和@Vendor
非空,使兩個選擇查詢(查詢基於@ProductName
值和查詢基礎上的聯合@Vendor
值)IF
@ProductName
是NOT null
和@Vendor
是NULL
,選擇查詢結果BA sed的上@ProductName
值IF
@ProductName
爲null,並且@Vendor
是NOT null
,選擇查詢結果基於@Vendor
值。
是否有更好的解決方案可以在一個查詢中完成,就像我們爲邏輯AND所做的那樣?
參考: