我正在尝试执行 sql 查询并根据参数是否为空来动态构建 where 条件。
我有这样的事情:
SELECT tblOrder.ProdOrder, tblOrder.Customer FROM tblOrder
CASE WHEN @OrderId IS NOT NULL
THEN
WHERE tblOrder.OrderId = @OrderId
ELSE
END
CASE WHEN @OrderCustomer IS NOT NULL
THEN
AND tblOrder.OrderCustomer = @OrderCustomer
ELSE
END
END
这不起作用,但这只是如何组装查询的一个小原型(prototype),因此如果 orderid 不为 null,则在 where 子句中包含,或者如果 ordercustomer 不为 null,则在 where 子句中包含。但是我在这里看到问题,例如如果 ordercustomer 不为 null 但 orderid 为 null,则会出现错误,因为未包含 where 关键字。
我如何解决这个问题的任何建议。
提前致谢, Laziale
最佳答案
这应该做你想做的:
SELECT tblOrder.ProdOrder, tblOrder.Customer
FROM tblOrder
WHERE ( @OrderId IS NULL OR tblOrder.OrderId = @OrderId )
AND ( @OrderCustomer IS NULL OR tblOrder.OrderCustomer = @OrderCustomer )
OPRION (RECOMPILE)
但是正如评论的那样,您应该包含 OPTION RECOMPILE 提示,否则性能会很差。
值得一读:
关于sql查询其中参数为空而不是空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19546284/