28

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

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

sqlserver は View、Table、Sproc、または Function の同義語のみをサポートしているようです。Alias はテーブル名と列名用です。

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

4

4 に答える 4

4

表までの 3 部構成表記とエイリアスを使用する、例

select * from tempdb.dbo.sysobjects a
join master.dbo.sysobjects b on a.id = b.id
于 2009-01-14T18:31:46.720 に答える
2

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

  1. 開発/テストサーバーでSQLServerManagementStudioを開きます
  2. [サーバーオブジェクト]>[リンクサーバー]を右クリックします
  3. [新しいリンクサーバー...]を選択します。
  4. [一般]ページを選択します
  5. [リンクサーバー]フィールドにエイリアス名を指定します-これは通常、ライブサーバーの名前になります
  6. プロバイダーとしてSQLNativeClientを選択します
  7. 製品名にsql_serverを入力します
  8. データソースで、開発サーバーの名前を指定します
  9. セキュリティとサーバーオプションを追加して好みに合わせて
  10. [OK]をクリックします

上記はSQLServer2005の場合ですが、2008の場合も同様である必要があります

それが済んだら、次のようにSQLを記述できます。

SELECT * FROM liveservername.databasename.dbo.tablename

これで、リンクサーバーを元に戻した状態でスクリプトを開発サーバーで実行すると、開発サーバーからデータをプルして正しく動作し、ライブサーバーでまったく同じスクリプトを実行すると、正常に動作します。

于 2011-12-20T14:05:11.420 に答える
1

別の構成ファイルを使用して、これと同様のことを行いました。

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

デシベル構成:

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() を呼び出します。

于 2009-01-14T18:42:01.460 に答える
0

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

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

于 2014-12-15T22:04:48.610 に答える