Работя с трето приложение, където не мога да променя таблиците. Създадохме персонализирани съвпадащи таблици „Месечни“ с допълнителна колона за дата и час „AsOfDate“, където изхвърляме данните в края на месеца и маркираме тези данни с датата на последния ден от месеца.
Искам да мога да създам една съхранена процедура (Приложението е проектирано да изисква изглед или съхранена процедура като източник на всички отчети.) и да използвам параметър, който или ще използва текущата таблица с данни (параметърът може да е NULL или = днешния Дата) или използвайте таблицата за края на месеца и филтрирайте по датата на края на месеца. По този начин имам един отчет, в който потребителят може да използва текущи или данни от краен период на определен месец.
Кое бихте предпочели (и защо) Съжаляваме, това не е напълно кодирано
Решение №1 Обединена заявка
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
Отново, това не е напълно кодирано и е нещо като db агностик (но е 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