我々は、データベース内の3つのテーブルがあります。テーブルスキーマを切り替えるストアドプロシージャ/関数を記述する最適な方法は何ですか? 。。。
- [未承認]、[データ]
- [承認] [データ]
- [歴史] [データ]
を我々現在、それぞれがテーブルからデータを取得するために同じ選択クエリを実行する3つのストアドプロシージャを持っていますが、唯一の違いはスキーマです。 (好ましくは、動的SQLなし)1つのストアドプロシージャで言うこれを行うのに最適な方法だろう何
我々は、データベース内の3つのテーブルがあります。テーブルスキーマを切り替えるストアドプロシージャ/関数を記述する最適な方法は何ですか? 。。。
を我々現在、それぞれがテーブルからデータを取得するために同じ選択クエリを実行する3つのストアドプロシージャを持っていますが、唯一の違いはスキーマです。 (好ましくは、動的SQLなし)1つのストアドプロシージャで言うこれを行うのに最適な方法だろう何
何の最適な方法はありません。
IF ... ELSE IF構文を使用して、どちらを選択するかを決定できます。
しかし、これは3つの異なるオブジェクトであるため、これが予想されます。私はあなたがdba.seから...正しく
をスキーマを使用していないことをお勧めしたい:
+1です。最適な方法は、このばかげたアンチパターンスキーマの使い方をしゃべり、それを適切に行うために再構築することです。 – TomTom
あなたはそのようなビューを作成することができます。
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であるとは言えません。私は
そしては
@gbnポスト下@TomTomに同意興味があるだけ、あなたが持っているだろうので、あなたは、状況を区別識別子と[データ]テーブルをただ持っていない理由未承認、承認済み、履歴用のIDを持つステータステーブルにFKを送信します。承認されていないデータが承認された場合は、ステータスIDを更新するだけで、ステータスが1つのクエリとフィルタを必要とします。 – kd7
@ kd7 SIMPLIEST everステートマシンは、異なるスキーマやテーブルに分割されます。はい、間違いなくTomTomは正しく –