0

ソース データベースのレコードを宛先データベースにアーカイブする手順があり、ソース データベースのテーブルが宛先データベースにミラーリングされます。したがって、テーブル名を指定するときは、次のようにデータベース名も完全に指定する必要があります。

DB_NAME.dbo.TABLE_NAME

ただし、対応するデータベースの名前が異なる環境間でも、このストアド プロシージャを移動する必要があります。

例えば:

開発:

DEV_DB_NAME.dbo.TABLE_NAME

QA:

QA_DB_NAME.dbo.TABLE_NAME

これらの DB 名は、SHELL スクリプトを使用して環境変数から取得し、SPROC に渡すことができます。ただし、TSQL ではデータベース名に変数を使用できません。

基本的にスクリプト全体を文字列に変換し、exec動的 ​​SQL を使用して実行するソリューションがあります。

私のソリューションは推奨されていますか? 他の解決策はありますか?

ありがとう。

4

2 に答える 2

0

シノニムを作成するのはどうですか?Stored Proc でシノニムを使用します。その後、各環境は同じシノニムを異なる方法で定義できます。

Sybase のシノニムが、SQL Server 2008 のようなデータベース全体で定義できることを願っています。

于 2012-09-05T19:24:24.563 に答える
0

sqsh を使用できます。これは、シェル変数のように変数を定義できる isql の代替手段であり、データベース名などを正しく置き換えて、同じ DDL を異なるデータベースにインストールできます。

または、シェル変数を使用して独自のロールを作成し、シェル変数または一時ファイルで異なる Sql を isql にフィードします。

それとも、この場合 SP を使用する必要がありますか? SP の主な利点の 1 つを利用しているようには思えません。一度最適化すると何度も実行され、最適化時間が節約されます。その場合、シェル スクリプトまたは perl スクリプトを使用してタスクを実行し、コマンド ライン パラメーター/構成ファイル/環境変数を指定して、どのデータベースを指定するかを指定します。

于 2012-09-06T08:18:04.013 に答える