Я работаю с третьим приложением pary, где я не могу изменить таблицы. Мы создали пользовательские таблицы соответствия «Ежемесячно» с дополнительным столбцом datetime «AsOfDate», где мы выгружаем данные в конце месяца и помещаем эти данные в дату последнего дня месяца.Объединить или использовать логику управления потоком, чтобы определить, какая таблица будет отображаться на
Я хочу, чтобы иметь возможность создать единую хранимую процедуру (приложение спроектировано так, чтобы требовать представления или хранимой процедуры в качестве источника всех отчетов.) И использовать параметр, который будет либо использовать текущую таблицу данных (параметр может быть NULL или = Today's Date) или используйте таблицу конца месяца и фильтр к концу месяца. Таким образом, у меня есть один отчет, в котором пользователь может либо использовать текущий, либо данные с определенного периода окончания месяца.
Что бы вы предпочли (И почему) К сожалению, это не полностью закодирована
Решение # 1 Union Query
Create Proc Balance_Report (@AsOfDate)
AS
Select Column1
From
(Select GetDate() as AsOfDate
, Column1
From Current.Balance
Union
Select AsOfDate
, Column1 From MonthEnd.Balance
) AS All_Balances
Where All_Balances.AsOfDate = @AsOfDate
Решение # 2 Используйте Если заявление, чтобы выбрать таблицу
Create Proc Balance_Report (@AsOfDate)
AS
If @AsOfDate IS NULL or @AsOfDate = GetDate()
Select GetDate() as AsOfDate
, Column1
From Current.Balance
Else
Select AsOfDate
, Column1 From MonthEnd.Balance
Where AsOfDate = @AsOfDate
Опять же, это не полностью закодировано и является своего рода агностиком db (но это SQL Server 2005).
Edit: Вариация для решения # 2, используя отдельные хранимые процедуры
Create Proc Balance_Report (@AsOfDate)
AS
If @AsOfDate IS NULL or @AsOfDate = GetDate()
Exec Current_Balance_Date -- no param necessary
Else
exec MonthEnd_Balance_Date @AsOfDate
Если бы я заменил свои запросы двумя отдельными sprocs, мне все равно понадобилась бы перекомпиляция? У меня нет ничего против RECOMPILE; Мне было просто любопытно. – JeffO
Если вы использовали две отдельные хранимые процедуры, вам потребуется только перекомпиляция, если параметры повлияют на лучший план, который будет использоваться. –