0

2 つのテスト データベースに多数のテーブルがあります。1 番目のデータベースは現在のもので、2 番目は 1 年前のスナップショットです。私はいくつかのストアド プロシージャを 1 番目のデータベースからぶら下げており、これも 2 番目のデータベースを参照しています。

私の質問は、本番環境に移行するときにストアド プロシージャを変更する必要がないように、どの方法を使用すればよいかということです。

これがコーディングの問題であれば、環境変数を使用します。SQL Server 2008 での私のオプションは何ですか。

ありがとうございました。

4

1 に答える 1

1

あなたの質問を理解するのは少し難しいです。もう少し詳細が役立ちます。

おそらく、ストアド プロシージャを特定のデータベースに関連付けるべきではありませんか? そうでない場合は、特定のデータベースへの参照を削除することをお勧めします。

当社では、マルチデータベースのストアド プロシージャとトリガーを使用しています。本番システムによっては、データベース名が変わる場合があります。データベースをインストールまたはアップグレードするときは、DB に依存しない SQL インストール スクリプトを使用します。データベースは特定の変数キーワードとして識別されます。次に、データベース名の変数キーワードを検索して T 内の実際のデータベース名に置き換える sed のようなスクリプトを使用します。 -SQL の場合、DB 固有の T-SQL スクリプトを適用します。シンプルで高速で、あらゆる運用データベースに移植できます。キーワードを置き換えない T-SQL は有効ではありません (したがって、DB 名のキーワードを置き換えずに実行することはできません)。

しかし、これは非常に特殊なケースであり、クロス データベース ストアド プロシージャについて耳にすることはめったにありません。システムと権限の管理が非常に複雑になります。

環境変数を使用する意味がわかりません。これは圧倒される可能性があり、リクエストを実行する前に文字列としてビルドする必要がありますが、これはお勧めできません。いずれにせよ、この方法で処理を進めるには、ストアド プロシージャを書き直す必要があります。

これは、スタック オーバーフローに関する私の最初の回答の試みです。この回答がお役に立てば幸いです。

よろしく。

于 2013-02-12T10:23:46.127 に答える