web-dev-qa-db-ja.com

SQLシノニムまたはデータベース名の「エイリアス」を作成する方法

私はms sql 2008を使用していて、別のデータベースを参照するデータベース名を作成しようとしています。たとえば、「Dev」、「Test」、「Demo」は、複数の構成ファイルから参照できるデータベース名ですが、各名前は「db20080101」や「db20080114」などの別のデータベースを指します。

[編集]一部の構成は、コードを制御するアプリケーション用で、一部は構成しません(例:MSレポートサービスのデータソースファイルの構成)[/編集]

Sqlserverは、View、Table、Sproc、またはFunctionの同義語のみをサポートしているようです。また、エイリアスはテーブル名と列名です。

私がドキュメントで見逃したこれを行う方法はありますか?誰かが回避策について何か提案がありますか?

27
Kevin McKinley

テーブルまでの3部表記とエイリアスを使用します。例

select * from tempdb.dbo.sysobjects a
join master.dbo.sysobjects b on a.id = b.id
4
SQLMenace

私は別の設定ファイルを使用してこれに似た何かを行いました。

新しい構成ファイルは、総称名をそのデータベースに接続するために必要なすべての情報(DB名、ユーザー名、パスワードなど)にマップし、接続関数は総称名を引数として受け取ります。

db.config:

DEV_DB_NAME = db20080101
DEV_DB_USER = dev_user
DEV_DB_PASS = dev_pass
TEST_DB_NAME = db20070101
TEST_DB_USER = test_user
TEST_DB_PASS = test_pass

接続コード:

db_connection get_connection(string prefix) {
    db_connection db_conn = new db_connection;
    string db_name = get_config_value(config_path, prefix + "_DB_NAME");
    string db_user = get_config_value(config_path, prefix + "_DB_USER");
    string db_pass = get_config_value(config_path, prefix + "_DB_PASS");

    db_conn.connect(db_name, db_user, db_pass);

    return db_conn;
}

次に、dbエイリアスを引数としてget_connection()を呼び出すだけです。

1
Ryan Ahearn

リンクサーバーを使用してこれをシミュレートする方法があります。これは、同じデータベースのセットを持つ2つのSQLサーバーがあり、1つは開発/テスト用、もう1つはライブ用であると想定しています。

  1. SQL Server Management Studioを開きます開発/テストサーバー上
  2. [サーバーオブジェクト]> [リンクサーバー]を右クリックします。
  3. 新しいリンクサーバーを選択...
  4. [全般]ページを選択します
  5. リンクサーバーフィールドにalias nameを指定します-これは通常liveサーバーの名前になります
  6. プロバイダーとしてSQL Native Clientを選択します
  7. 製品名にsql_serverと入力します
  8. データソースでdevelopmentサーバーの名前を指定します
  9. セキュリティとサーバーオプションを追加して味わう
  10. OKをクリックします

上記はSQL Server 2005の場合ですが、2008の場合も同様です。

これが完了したら、次のようなSQLを記述できます。

SELECT * FROM liveservername.databasename.dbo.tablename

これで、リンクサーバーを使用して開発サーバーでスクリプトを実行すると、スクリプトが正常に動作し、開発サーバーからデータを正しく取得できます。また、ライブサーバーでまったく同じスクリプトを実行すると、スクリプトは正常に動作します。

1
user1039415

これはおそらくすべての状況で役立つわけではありませんが、ビューを使用するオプションはまだあります。ビューに適切なIDキー(主キー)がある限り、ビューに挿入、削除、更新、選択できます。別のデータベースを指す場合は、ドロップして再作成し、別のスキーマを取得する必要があります(テストまたは本番、あるいはその両方でスキーマに変更を加えながら本番とテストの間で作業している場合)。

シノニムは、別のデータベースに移動して3部または4部の名前を付ける場合に便利ですが、セット名を付けることができるようにしたい場合は、固定名を使用できるリンクサーバーも機能します。テーブル名が両方のデータベースで同じで、prodとtestの間を指しているだけの場合。

0
Lauren Glenn