Я работаю над хранимой процедурой с несколькими необязательными параметрами. Некоторые из этих параметров являются отдельными значениями, и это достаточно легко использовать ИНЕК, как:Работа с необязательными параметрами хранимой процедуры
WHERE (@parameter IS NULL OR column = @parameter)
Однако, в некоторых случаях, когда условие является более сложным:
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