0

这是表格和数据

CREATE TABLE #Customers
(
    ID              INT NOT NULL,
    ProductID       INT NOT NULL,
    OrderID         INT NULL
)

INSERT INTO #Customers VALUES (1,10,1)
INSERT INTO #Customers VALUES (2,10,NULL)
INSERT INTO #Customers VALUES (3,10,5)
INSERT INTO #Customers VALUES (4,20,NULL)
INSERT INTO #Customers VALUES (5,20,NULL)
INSERT INTO #Customers VALUES (6,20,22)
GO

我有一个存储过程,其中结果的决定基于参数@OrderID。如果@OrderID 不为空,则返回匹配此参数的行,否则返回所有行。如下所示。

DECLARE @OrderID INT 
SET @OrderID = NULL

IF @OrderID IS NULL 
BEGIN
    SELECT * FROM #Customers
END
ELSE
BEGIN
    SELECT * FROM #Customers
    WHERE OrderID = @OrderID 
END

我只是想知道是否有写一个可以涵盖这两种情况的 WHERE 子句。这样我可以避免 IF-ELSE 分支中的代码重复

4

2 回答 2

1

你可以把它写成

        SELECT * FROM #Customers
WHERE (OrderID = @OrderID  or @OrderID is Null)
于 2013-10-31T18:22:04.053 回答
1
DECLARE @OrderId INT = NULL

SELECT * 
FROM #Customers c
WHERE 1=1
AND (@OrderId IS NULL OR c.OrderId = @OrderId)

如果变量 @ORderId 为 NULL,所有行都将返回。如果它不为 NULL,则过滤器的后半部分将触发。

于 2013-10-31T18:22:22.083 回答