Подтвердить что ты не робот

Как создать синоним Sql или "Псевдоним" для имени базы данных?

Я использую ms sql 2008 и пытаюсь создать имя базы данных, которое ссылается на другую базу данных. Например, "Dev", "Test", "Demo" будут именами баз данных, которые я мог бы ссылаться на мои несколько файлов конфигурации, но каждое имя будет указывать на другую базу данных, такую ​​как "db20080101" или "db20080114".

[Edit] Некоторые из конфигураций предназначены для приложений, которые управляют кодом, а некоторые из них не являются (например, конфигурациями файлов данных службы отчетов MS Reporting) [/Edit]

Кажется, что sqlserver поддерживает только синонимы для View, Table, Sproc или Function. И Alias ​​'предназначены для имен таблиц и столбцов.

Есть ли способ сделать это, который я пропустил в документах? У кого-нибудь есть предложения по обходному пути?

4b9b3361

Ответ 1

использовать 3 части обозначения и псевдоним до таблицы, пример

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

Ответ 2

Я сделал что-то подобное этому, используя другой файл конфигурации.

Новый файл конфигурации сопоставляет ваше общее имя со всей информацией, необходимой для подключения к этой базе данных (имя 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;
}

Затем вы просто вызываете get_connection() с вашим псевдонимом db в качестве аргумента.

Ответ 3

Есть способ имитировать это с помощью связанного сервера. Это предполагает, что у вас есть два SQL-сервера с одним и тем же набором баз данных, один для разработки/теста и один live.

  • Откройте SQL Server Management Studio на сервере разработки/тестирования
  • Щелкните правой кнопкой мыши Объекты серверa > Связанные серверы
  • Выберите Новый связанный сервер...
  • Выберите общую страницу
  • Укажите имя alias в поле Linked server - обычно это имя вашего живого сервера
  • Выберите собственный клиент SQL в качестве поставщика
  • Введите sql_server для имени продукта
  • В источнике данных укажите имя сервера разработка
  • Добавить параметры безопасности и сервера по вкусу
  • Нажмите "ОК"

Вышеупомянутое относится к SQL Server 2005, но должно быть похоже на 2008 год

Как только вы это сделали, вы можете написать SQL следующим образом:

SELECT * FROM liveservername.databasename.dbo.tablename

Теперь, когда ваши сценарии запускаются на сервере разработки с привязанным сервером к себе, они будут корректно вынимать данные с сервера разработки и при выполнении одинаковых сценариев на реальном сервере они будут работать нормально.

Ответ 4

Я знаю, что это, вероятно, не поможет во всех ситуациях, но у вас все еще есть возможность использовать представления. Вы можете вставлять, удалять, обновлять, выбирать в представлении, если у него есть правильный ключ идентификации (первичный ключ). Если вы укажете его на другую базу данных, вы должны сбросить и воссоздать, чтобы получить другую схему (в случае, если вы работаете между производством и тестом при внесении изменений в схему в тесте и/или производстве.

Синонимы полезны, когда вы переходите к другой базе данных и имеете имя 3 или 4 части, но если вы хотите сделать так, чтобы вы могли иметь заданное имя, также будет работать связанный сервер, который позволит вам использовать фиксированное имя, если имена таблиц одинаковы в обеих базах данных, и вы просто указываете между prod и test.