存储过程的SELECT WHERE语句中的CASE?

时间:2012-01-03 17:08:25

标签: sql sql-server

我需要在存储过程中根据ManufacturerID过滤表但是当传入null的ManufacturerID时我需要所有订单。

我可以在WHERE语句中执行此操作,因此我不必在我的SP中将整个查询写入两次吗?

4 个答案:

答案 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)

这也可能导致参数嗅探问题。如果可能,可能首先要清理空值?