我需要在存储过程中根据ManufacturerID过滤表但是当传入null的ManufacturerID时我需要所有订单。
我可以在WHERE语句中执行此操作,因此我不必在我的SP中将整个查询写入两次吗?
答案 0 :(得分:6)
WHERE
@param IS NULL OR field = @param
但请注意,如果将其扩展为搜索多个列,则效率非常低。 (见http://www.sommarskog.se/dyn-search.html)
低效放大版本的示例...
WHERE
(@param1 IS NULL OR field1 = @param1)
AND (@param2 IS NULL OR field2 = @param2)
AND (@param3 IS NULL OR field3 = @param3)
答案 1 :(得分:2)
你可以这样做:
where t.ManufacturerID = @ManufacturerIDParam OR @ManufacturerIDParam is null
答案 2 :(得分:1)
尝试:
WHERE table.field = coalesce(@param, table.field)
答案 3 :(得分:1)
这也可能导致参数嗅探问题。如果可能,可能首先要清理空值?