我正在使用多个可选参数的存储过程。其中一些参数是单值,它是很容易使用WHERE子句,如:使用可选的存储过程参数
WHERE (@parameter IS NULL OR column = @parameter)
然而,在某些情况下,WHERE条件比较复杂:
WHERE (@NewGroupId IS NULL OR si.SiteId IN (SELECT gs.SiteId
FROM [UtilityWeb].[dbo].[GroupSites] AS gs
WHERE gs.GroupId = @NewGroupId))
当我取消这些复杂在WHERE子句中,查询执行时间加倍并且执行计划变得非常复杂。虽然执行计划不会影响我,但将查询的执行时间加倍是一个明确的问题。
是否有其他人发现了,在他们的存储过程的可选参数工作最佳实践或模式?
这是动态SQL会是更好的解决方案吗?
执行计划应该会打扰你,因为它告诉你到底查询执行器究竟在做什么。 – 2008-10-23 13:15:59
复杂性并没有直接打扰我,因为我有一些非常复杂的查询可以快速运行。可悲的是,这并不是。 – 2008-10-23 13:47:03
另请参阅:http://stackoverflow.com/questions/532468/ignoring-a-null-parameter-in-t-sql/532510#532510 – 2009-02-12 15:06:43