我有一些代码,其中 WHERE 子句中使用的变量可以为空。因此,我必须使用 IF ELSE 查询数据来检查 NULL。有没有办法在一个查询中写入?
DECLARE @OrderID UNIQUEIDENTIFIER
IF @OrderID IS NULL
BEGIN
SELECT *
FROM Customers
WHERE OrderID IS NULL
END
ELSE
BEGIN
SELECT *
FROM Customers
WHERE OrderID = @OrderID
END
SELECT *
FROM Customers
WHERE EXISTS (SELECT OrderID INTERSECT SELECT @OrderID)
将有效地做到这一点。
有关更多信息,请参阅未记录的查询计划:相等比较。
假设您想要 order_id 为 null 或等于提供的订单 ID 的所有记录,则使用 COALESCE 将保留原始订单 ID(如果不为 null),但会生成提供的订单 ID(如果为 null)。然后将其与提供的订单 ID 进行比较。
SELECT *
FROM customers c
WHERE COALESCE(c.order_id, @OrderID) = @OrderID;
根据查询的正确版本,我要么将其全部写在 WHERE 子句中,要么可能将两侧合并为已知不会出现在该列中的值
。
SELECT c.*
FROM customers c
WHERE (@OrderID IS NULL AND c.OrderId IS NULL) OR c.OrderId = @OrderId
-- OR
SELECT c.*
FROM customers c
WHERE COALESCE(@OrderId, '@@@') = COALESCE(c.OrderId, '@@@')
DECLARE @OrderID UNIQUEIDENTIFIER
SELECT * FROM Customers
WHERE ISNULL(@OrderID, 0) = 0 or @OrderID = @OrderID