由于变量为NULL,避免IF ELSE

cra*_*ice 5 t-sql sql-server-2008

我有一些代码,其中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
Run Code Online (Sandbox Code Playgroud)

Mar*_*ith 9

  SELECT * 
  FROM Customers
  WHERE EXISTS (SELECT OrderID INTERSECT SELECT @OrderID)
Run Code Online (Sandbox Code Playgroud)

会有效地做到这一点.

有关此内容的更多信息,请参阅未记录的查询计划:平等比较.

  • @ i-one - 据我所知.两者都可以在`OrderID`上给出一个索引寻求计划 (2认同)