У меня есть таблица, которая разбита по месяцам (partmonth int). Хранимая процедура, используемая для запроса таблицы, получает только диапазон дат. Мне нужно найти способ получить все номера месяцев в диапазоне дат и передать их в условие where в (1,2 ...) для секционированной таблицы. Я попытался создать временную таблицу с номерами месяцев и использовать оператор where in (выберите monthnumber from #tmp), но, похоже, он выполняет #tmp для каждой записи или сканирует все разделы. Я также пытался присоединить секционированную таблицу к таблице tmp, но, похоже, это сканирует также все разделы. Я предполагаю, что оптимизатору запросов нужны жесткие значения для partmonth, где.
запрос, чтобы получить все номера месяцев:
declare @months varchar(100)
select d.* into #tmp
from
(select distinct MonthNumber from [date] where [date] between '1/1/2010' and '4/1/2010') d
select @months = coalesce(@months + ', ', '') + cast(monthnumber as varchar(2)) from #tmp
select @months
drop table #tmp
Теперь мне нужно иметь возможность использовать эти номера месяцев в операторе выбора, чтобы они вызывали правильные разделы для использования.
Что-то вроде следующего, которое не работает:
выберите * из [транзакции]
где partmonth in (@months)