4

最近、バックエンド サーバーとして SQL Server 2008 を使用する内部 ASP.NET Web サイトを継承しました。SQL Server にはデータベース があり、各データベース内Database1に複数Companiesあり、すべてが同じテーブル セットを持っています。

例えば:

Database1
     Company1.Table1
     Company1.Table2
     Company2.Table1
     Company2.Table2

Web サイトはいくつかのストアド プロシージャを呼び出します。ただし、ストアド プロシージャは、ハード コーディングされた会社名からデータを選択するようにコーディングされています。

例えば:

SELECT * FROM Company1.Table2

Web サイトは にしかリンクされていないため、これは今のところ問題なく機能していますCompany1。現在、ウェブサイトを にもリンクする予定ですCompany2。実際にCompany 2は、IIS での別のセットアップを介して、テスト ベッドとして使用されています。

この設定を保持できるように、会社名をストアド プロシージャに渡す簡単な方法はありますか?

また、別の方法として SQL の別のインスタンスを使用することも提案されているため、同じdatabase\company名前を使用できますが、これは変更がほとんどないことを意味します。

もう 1 つの提案は、単にストアド プロシージャを から にコピーしCompany 1Company 2ハード コードされた名前をCompany 2?に変更することでした。

少しあいまいで申し訳ありませんが、これは今朝机に落としたもので、SQL Server や Web サイトの専門家ではありません。

アドバイスをよろしくお願いします。

乾杯

ジャスティン

4

2 に答える 2

1

この設定を保持できるように、会社名をストアド プロシージャに渡す簡単な方法はありますか?

(ASP.net コードについて何も知らなくても) この設定を保持する最も簡単な方法は、テスト用にデータベース全体の別のコピーを実行することです。開発用に 3 番目のコピーを提案しますが、それは話題から外れています。

上記の方法はすべて実行可能ですが、データベースをコピーするだけで、データベース内のコードを変更する必要はありません。データベース名は、ASP.net コードにハードコードされないことが望ましいので、新しいデータベースを簡単に指すことができるはずです。

これにより、テスト用に独立したデータセットを持つという追加の利点が得られるため、変更のテスト中に移動するターゲットを追跡する必要がありません。

他の提案された方法についての簡単なコメント:

会社名をストアドプロシージャに渡す可能性があります

これは、ストアド プロシージャのリファクタリングを意味するだけでなく、おそらく動的 SQL が必要になり、SQL インジェクションが発生する可能性があります (内部的なものであるため、必ずしも問題ではありません)。

もう 1 つの提案は、会社 1 から会社 2 にストアド プロシージャを単純にコピーし、会社 2 でハードコードされた名前を変更することでした。

繰り返しますが、これにはストアド プロシージャのリファクタリングが含まれます (ただし、検索/置換のみを使用します)。リファクタリングが適切に機能したことを証明するには、完全なテストが必要になることをお勧めします。

于 2013-03-26T10:18:57.007 に答える
0

これにより、同じテーブル構造を持つ 2 つの異なるデータベース テーブルのデータがマージされます。

SELECT * FROM Company1.Table2
UNION ALL
SELECT * FROM Company2.Table2
于 2013-08-02T06:37:20.957 に答える