0

テーブルを変更できないサードパーティアプリを使用しています。月末にデータをダンプし、それらのデータにその月の最終日の日付でフラグを立てる追加の datetime 列「AsOfDate」を使用して、カスタム マッチング「Monthly」テーブルを作成しました。

単一のストアド プロシージャを作成し (アプリケーションは、すべてのレポートのソースとしてビューまたはストアド プロシージャを必要とするように設計されています)、現在のデータ テーブルを使用するパラメーターを使用できるようにしたいと考えています (パラメーターは NULL または = Today's日付) または月末テーブルを使用して、月末の日付でフィルター処理します。このようにして、ユーザーが現在のデータまたは特定の月末期間のデータを使用できるレポートが 1 つあります。

あなたはどちらを好みますか (そしてその理由) 申し訳ありませんが、これは完全にコード化されていません

ソリューション #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

繰り返しますが、これは完全にコード化されておらず、データベースに依存していません (ただし、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
4

2 に答える 2

1

私は非組合ソリューションを好みます。単一のテーブルから選択する方が、ユニオンを実行してユニオンから単一のテーブルのデータを選択するよりも常に高速です。

于 2009-02-07T13:08:56.300 に答える