我正在尝试执行 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
这不起作用,但这只是如何组装查询的一个小原型,因此如果 orderid 不为 null 则包含在 where 子句中,或者如果 ordercustomer 不为 null 则包含在 where 子句中。但我在这里看到问题,例如如果 ordercustomer 不为 null 但 orderid 为 null,则会出现错误,因为不包含 where 关键字。
我该如何解决这个问题?
这应该做你想要的:
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 提示,否则性能会很差。
值得一读:
- http://www.sommarskog.se/dyn-search-2008.html http://www.sommarskog.se/dyn-search-2008.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)