Я работаю со сторонним приложением, где не могу изменять таблицы. Мы создали настраиваемые таблицы сопоставления «Ежемесячно» с дополнительным столбцом даты и времени «AsOfDate», где мы выгружаем данные в конце месяца и помечаем эти данные датой последнего дня месяца.
Я хочу иметь возможность создать одну хранимую процедуру (приложение предназначено для использования представления или хранимой процедуры в качестве источника всех отчетов) и использовать параметр, который будет либо использовать текущую таблицу данных (параметр может быть NULL или = сегодняшнее Дата) или используйте таблицу конца месяца и отфильтруйте по дате окончания месяца. Таким образом, у меня есть один отчет, в котором пользователь может использовать текущие данные или данные за определенный период окончания месяца.
Что бы вы предпочли (и почему) Извините, это не полностью закодировано
Решение 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. Используйте оператор If для выбора таблицы
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
Опять же, это не полностью закодировано и не зависит от базы данных (но это SQL Server 2005).
Редактировать: вариант решения № 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