【发布时间】:2008-10-23 13:03:55
【问题描述】:
我正在处理一个带有几个可选参数的存储过程。其中一些参数是单个值,很容易使用 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 是更好解决方案的实例之一吗?
【问题讨论】:
-
执行计划应该会困扰您,因为它可以准确地告诉您查询执行器实际在做什么。
-
复杂性并没有完全困扰我,因为我有一些非常复杂的查询可以快速运行。可悲的是,这个没有。