Я работаю над хранимой процедурой с несколькими необязательными параметрами. Некоторые из этих параметров являются отдельными значениями, и достаточно просто использовать предложение 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 был бы лучшим решением?