我有一些代码,其中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
答案 0 :(得分:5)
SELECT *
FROM Customers
WHERE EXISTS (SELECT OrderID INTERSECT SELECT @OrderID)
将有效地做到这一点。
答案 1 :(得分:1)
假设您想要所有记录,其中order_id为null或等于提供的订单ID,则使用COALESCE将保留原始订单ID(如果不为null),但如果 为null,则会生成提供的订单ID。然后将其与提供的订单ID进行比较。
SELECT *
FROM customers c
WHERE COALESCE(c.order_id, @OrderID) = @OrderID;
根据查询的正确版本,我要么在WHERE子句中全部写出来,要么将COALESCE双方写入一个已知不会出现在该列中的值 ever
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, '@@@')
答案 2 :(得分:0)
试试这个
DECLARE @OrderID UNIQUEIDENTIFIER
SELECT * FROM Customers
WHERE ISNULL(@OrderID, 0) = 0 or @OrderID = @OrderID