2012-01-04 9 views
0

我々は、データベース内の3つのテーブルがあります。テーブルスキーマを切り替えるストアドプロシージャ/関数を記述する最適な方法は何ですか? 。。。

  • [未承認]、[データ]
  • [承認] [データ]
  • [歴史] [データ]

を我々現在、それぞれがテーブルからデータを取得するために同じ選択クエリを実行する3つのストアドプロシージャを持っていますが、唯一の違いはスキーマです。 (好ましくは、動的SQLなし)1つのストアドプロシージャで言うこれを行うのに最適な方法だろう何

+2

@gbnポスト下@TomTomに同意興味があるだけ、あなたが持っているだろうので、あなたは、状況を区別識別子と[データ]テーブルをただ持っていない理由未承認、承認済み、履歴用のIDを持つステータステーブルにFKを送信します。承認されていないデータが承認された場合は、ステータスIDを更新するだけで、ステータスが1つのクエリとフィルタを必要とします。 – kd7

+0

@ kd7 SIMPLIEST everステートマシンは、異なるスキーマやテーブルに分割されます。はい、間違いなくTomTomは正しく –

答えて

5

何の最適な方法はありません。

IF ... ELSE IF構文を使用して、どちらを選択するかを決定できます。

しかし、これは3つの異なるオブジェクトであるため、これが予想されます。私はあなたがdba.seから...正しく

をスキーマを使用していないことをお勧めしたい:

+4

+1です。最適な方法は、このばかげたアンチパターンスキーマの使い方をしゃべり、それを適切に行うために再構築することです。 – TomTom

2

あなたはそのようなビューを作成することができます。

CREATE VIEW dbo.blabla 
AS 
SELECT 0 as SourceSchema, otherfields from [Unapproved].[Data] 
UNION ALL 
SELECT 1 as SourceSchema, otherfields from [Approved].[Data] 
UNION ALL 
SELECT 2 as SourceSchema, otherfields from [History].[Data] 
GO 

CREATE PROC GetTheData 
@fromwhere int 
As 
select otherfields from dbo.blabla where SourceSchema = @fromwhere 

but

私はそれがOPTIMALであるとは言えません。私は

そして

関連する問題