#sql #sql-server #tsql #stored-procedures #ssms
#sql #sql-сервер #tsql #хранимые процедуры #ssms
Вопрос:
У меня есть хранимая процедура
EXEC demoProcedure @start='01-01-2019',@end = '02-01-2019'
Хранимая процедура принимает два параметра даты и выполняет поиск данных между ними. Мой вопрос в том, что я хотел бы, чтобы эта процедура проверялась несколько раз для множества диапазонов дат. Например, я хотел бы в основном вызвать:
EXEC demoProcedure @start='01-01-2019',@end = '02-01-2019';
EXEC demoProcedure @start='02-01-2019',@end = '03-01-2019';
....
EXEC demoProcedure @start='12-01-2019',@end = '01-01-2020'
Или эффективный вызов этой хранимой процедуры один раз за каждый месяц. В прошлом я возился с созданием временной таблицы дат:
;WITH DateTable AS
(
SELECT row = 1, date = '2019-01-01'
UNION ALL
SELECT row 1, DATEADD(YEAR, -1, date)
FROM DateTable
WHERE row 1 <= 7
)
SELECT *
FROM DateTable
Который эффективно возвращает первое января за последние 7 лет. Есть ли способ легко объединить эти два, чтобы вызвать хранимую процедуру один раз для каждого набора дат? Т.е. вызвать ее для start=row(1),end=row(2); start=row(2),end=row(3);…. до конца строки? Или есть более простой способ настроить все это. Спасибо!
Комментарии:
1. Почему бы вам не исправить процедуру для группировки результатов по месяцам? Тогда вам нужно вызвать ее только один раз, а не снова и снова.
2. Можете ли вы описать, почему вам нужно вызывать его отдельно для каждого месяца? Кроме того, возвращает ли SP набор данных, и нужно ли его использовать в какой-либо форме после вызова SP?
3. @remh . . . Действительно, если вы вызываете это в коде, то выполнение цикла while 12 раз кажется проще — и безопаснее — чем изменение базовой процедуры. Я подозреваю, что у вас есть какой-то другой мотив, например, возврат одного результирующего набора. Возможно, вы можете справиться с этим, вставив во временную таблицу.
4. Что сделало бы один способ «проще» другого?
5. Какова ваша конечная цель здесь? Скопировать данные в Excel или какое-либо другое программное обеспечение? Зачем вам нужно 12 отдельных наборов результатов вместо 1?