Как создать синоним Sql или «Псевдоним» для имени базы данных? - PullRequest
27 голосов
/ 14 января 2009

Я использую MS SQL 2008 и пытаюсь создать имя базы данных, которая ссылается на другую базу данных. Например, «Dev», «Test», «Demo» - это имена баз данных, на которые я мог бы ссылаться из нескольких файлов конфигурации, но каждое имя указывало бы на другую базу данных, например «db20080101» или «db20080114».

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

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

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

Ответы [ 4 ]

4 голосов
/ 14 января 2009

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

select * from tempdb.dbo.sysobjects a
join master.dbo.sysobjects b on a.id = b.id
1 голос
/ 20 декабря 2011

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

  1. Откройте SQL Server Management Studio на своем сервере разработки / тестирования
  2. Щелкните правой кнопкой мыши Объекты сервера> Связанные серверы
  3. Выбрать новый связанный сервер ...
  4. Выберите общую страницу
  5. Укажите псевдоним имя в поле Связанный сервер - обычно это будет имя вашего live сервера
  6. Выберите собственного клиента SQL в качестве поставщика
  7. Введите sql_server для названия продукта
  8. В источнике данных укажите имя сервера разработки
  9. Добавить параметры безопасности и сервера по вкусу
  10. Нажмите ОК

Выше приведено для SQL Server 2005, но должно быть аналогично для 2008

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

SELECT * FROM liveservername.databasename.dbo.tablename

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

1 голос
/ 14 января 2009

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

Новый файл конфигурации сопоставляет ваше универсальное имя со всей информацией, необходимой для подключения к этой базе данных (имя БД, имя пользователя, пароль и т. Д.), А затем ваша функция подключения принимает ваше универсальное имя в качестве аргумента.

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 в качестве аргумента.

0 голосов
/ 16 декабря 2014

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

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

...