2010-10-29 2 views
9

Возможно ли иметь не только LinkedServer, но и связанную базу данных и сервер? Моя ситуация такова, что иметь одну среду с настройкой:Связанные с SQL Server псевдонимы базы данных

ServerX: DatabaseOne, DatabaseTwo

и другой среде:

раздаточная: MyDatabaseOne, MyDatabaseTwo

Теперь DatabaseOne и MyDatabaseOne точно такие же, как DatabaseTwo и MyDatabaseTwo. У меня есть хранимая процедура, которая выполняет некоторые базовые обновления таблиц с одной базы данных на другой на данном сервере, и я хочу, чтобы она могла работать в обеих средах. Я настроил связанный сервер так мое обращение может быть:

MyLinkedServer.DatabaseOne.dbo.MyTable или MyLinkedServer.MyDatabaseOne.dbo.MyTable

Даже с этим, хотя, мне нужно будет изменить SP, когда я переключатель среды изменить имена БД, есть ли способ создания базы данных псевдонимов, так что я могу написать:

SELECT * FROM MyLinkedServer.MyLinkedDatabase.dbo.MyTable

так что до тех пор, как LinkedServer и (если возможно) LinkedDatabase настроены в каждой среде, SP будет работать без изменения при переключении g?

+0

Чтобы узнать о связанном сервере и синонимах, пожалуйста, обратитесь к http://sqlblog.toolsoftonline.com/?p=78 – 2016-04-12 09:15:06

ответ

4

Я думаю, что короткий ответ - нет. Я не верю, что поддержка псевдонимов базы данных еще не подтверждена.

Динамический SQL может это сделать. Вы можете ввести имя базы данных и т. Д. И выполнить запрос.

+0

Спасибо @Carl, у меня было ощущение, что это будет ответ. – Ben

+0

Соберите правильную вещь Бен и создайте еще один экземпляр с правильными именами баз данных! :) –

+0

Ха-ха, спасибо, это не мое решение! – Ben

3

Нашел ответ на мои проблемы. Это немного сложнее, чем просто создание Linked Database, но синонимы были ответом.

http://msdn.microsoft.com/en-us/library/ms190626.aspx

+0

«Замечание» на этой странице примечательно (!?) «Вы не можете ссылаться на синоним, который находится на связанном сервере». Вы не можете создать синоним базы данных - путают? –

+0

Да, это было первое, что я пытался сделать, и заметил, что это провалилось. Смысл, вы не можете создать Linked Server «MyLinkedServer», а затем создать синоним «MySyn» на указанном сервере и вызвать «MyLinkedServer.MySyn». Вам не нужно использовать LinkedServers, если вы все равно используете синоним, так как вы должны объявить сервер о его создании. – Ben

19

Вы можете избежать динамического SQL альясингом сервера, выполнив следующие действия (кредиты this post)

1) Шаг 1:

  • В SQL Server Management Studio Откройте Linked Servers а затем «Новый связанный сервер».
  • Внутри появившегося мастера - выберите вкладку «Общие».
  • Укажите имя псевдонима в поле «Связанный сервер».
  • В качестве поставщика выберите собственный клиент SQL.
  • Добавьте sql_server в поле «Название продукта» (это волшебство).
  • В «Источник данных» - укажите имя хоста, которое будет использоваться в качестве связанного сервера.

2) Шаг 2:

  • На вкладке Security - указать соответствующие параметры безопасности (например,контекст безопасности)

3) Шаг 3:

  • На вкладке Параметры сервера - установите "Data Access", "RPC", "RPC Out" и "Использование удаленного параметры сортировки" истина.

4) Шаг 4:

  • Наслаждайтесь

Вы можете взять один шаг и пропустить указание имени базы данных при запросе таблицы можно создавать синонимы для каждого объекта, как это :

CREATE SYNONYM [dbo].[DimProduct] 
FOR 
[AdventureWorksDW].[dbo].[DimProduct] 

Это создаст синонимы DimProduct в вашей базе данных. Насколько я знаю, вы не можете создать синоним базы данных.

0

Я знаю, это старый вопрос, но (по крайней мере, в SQL 2014, но, я думаю, в более старых версиях тоже) вы можете настроить связанный сервер с «псевдонимами» и удаленными запросами (OPENQUERY()) для часть базы данных.

USE [master] 
GO 

EXEC master.dbo.sp_addlinkedserver @server = N'MyAliasServer', @srvproduct=N'SQLSERVER', @provider=N'SQLNCLI', @datasrc=N'MyRealServer1', @catalog=N'database1' 

Конечно, вам также нужно настроить безопасность и т. Д. После этого вы можете запустить

SELECT * OPENQUERY(MyAliasServer, 'select * from dbo.MyTbl') 

без указания имени базы данных (поскольку он уже определен в соединенном соединении с сервером).

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

Смежные вопросы