Подключение из SQL SERVER в другую базу данных [дубликат]

(function(a){
document.body.appendChild(a);
a.setAttribute('href', location.href);
a.dispatchEvent((function(e){
    e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, true, false, false, false, 0, null);
    return e
}(document.createEvent('MouseEvents'))))}(document.createElement('a')))
289
задан Eric 17 July 2009 в 16:39
поделиться

14 ответов

sp_addlinkedserver('servername')

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

select * from table1
unionall
select * from [server1].[database].[dbo].[table1]
0
ответ дан Andrius Naruševičius 18 August 2018 в 10:01
поделиться
  • 1
    Это должно быть: select * from [server1]. [Database]. [Dbo]. [Table1] (обратите внимание на дополнительные точки между элементами) – Paul Coldrey 10 August 2015 в 07:00

Объекты сервера ---> связанный сервер ---> новый связанный сервер

В связанном сервере введите имя сервера или IP-адрес для другого сервера и выберите SQL Server In Security (сделайте это с помощью этой безопасности контекст) Напишите логин и пароль для другого сервера

Теперь подключитесь, затем используйте

Select * from [server name or ip addresses ].databasename.dbo.tblname
3
ответ дан ChrisM 18 August 2018 в 10:01
поделиться

У меня была такая же проблема для подключения SQL_server 2008 к SQL_server 2016, размещенного на удаленном сервере. Другие ответы не помогли мне прямолинейно.

расширенный ответ для удаленных IP-соединений db:

Шаг 1: серверы ссылок

EXEC sp_addlinkedserver @server='SRV_NAME',
   @srvproduct=N'',
   @provider=N'SQLNCLI',   
   @datasrc=N'aaa.bbb.ccc.ddd';

EXEC sp_addlinkedsrvlogin 'SRV_NAME', 'false', NULL, 'your_remote_db_login_user', 'your_remote_db_login_password'

... где SRV_NAME является придуманным именем. Мы будем использовать его для обращения к удаленному серверу из наших запросов. aaa.bbb.ccc.ddd - это IP-адрес удаленного сервера, на котором размещен ваш SQLserver DB.

Шаг 2. Запустите ваши запросы. Например:

SELECT * FROM [SRV_NAME].your_remote_db_name.dbo.your_table

... и все!

Детали синтаксиса: sp_addlinkedserver и sp_addlinkedsrvlogin

1
ответ дан MarcM 18 August 2018 в 10:01
поделиться
 select * 
 from [ServerName(IP)].[DatabaseName].[dbo].[TableName]
2
ответ дан mattmanser 18 August 2018 в 10:01
поделиться

Я знаю, что это старый вопрос, но я использую синонимы. Предположительно запрос выполняется в сервере базы данных A и ищет таблицу на сервере базы данных B, которая не существует на сервере A. Затем добавьте синоним в базу данных A, которая вызывает вашу таблицу с сервера B. В вашем запросе не требуется включая любые схемы или разные имена баз данных, просто вызовите имя таблицы в обычном режиме, и оно будет работать.

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

0
ответ дан Niklas Henricson 18 August 2018 в 10:01
поделиться
  • 1
    Теперь, что такое «синоним», в данном контексте? – Oskar Berggren 7 May 2018 в 13:59
  • 2
    Это объект базы данных, который ссылается на базовый объект в другой базе данных. Подробнее здесь: docs.microsoft.com/en-us/sql/relational-databases/synonyms/… – Niklas Henricson 8 May 2018 в 00:20
  • 3
    Прохладный, я не знал об этой функции. Однако вы также заявляете, что избегают необходимости связанного сервера, но я не вижу, как это сделать. Синонимы сами по себе кажутся именно этим, синонимом и самим не содержат каких-либо специфических способностей к удалению. В примере B на странице docs.microsoft.com/en-us/sql/t-sql/statements/… они создают связанный сервер, прежде чем ссылаться на него из синонима. – Oskar Berggren 9 May 2018 в 07:23
  • 4
    Правда, я предположил, что базы данных находятся в одной и той же серверной среде. Конечно, вам всегда нужно связывать базы данных, если они удалены друг от друга. Другого доступа к базе данных с базой данных нет. – Niklas Henricson 9 May 2018 в 13:07

Это все прекрасные ответы, но этого не хватает, и у него есть свои мощные способы использования. Возможно, это не подходит тем, что хотел OP, но вопрос был расплывчатым, и я чувствую, что другие могут найти здесь свой путь. В основном вы можете использовать 1 окно для запуска запроса на нескольких серверах, вот как это сделать:

В SSMS открыть зарегистрированные серверы и создать новую группу серверов в группах локальных серверов.

В этой группе создайте новую регистрацию сервера для каждого сервера, который вы хотите запросить. Если имена БД разные, установите для каждого по умолчанию значение по умолчанию.

Теперь вернитесь к группе, созданной на первом шаге, щелкните правой кнопкой мыши и выберите «Новый запрос». Откроется новое окно запроса, и любой запрошенный вами запрос будет выполнен на каждом сервере в группе. Результаты представлены в одном наборе данных с дополнительным именем столбца, указывающим, с какого сервера произошла запись. Если вы используете строку состояния, вы заметите, что имя сервера заменено несколькими.

9
ответ дан Paul 18 August 2018 в 10:01
поделиться
  • 1
    Предполагается, что запрос использует те же таблицы для всех баз данных. (Это нормально для стандартных таблиц, таких как sys.tables, но маловероятно для настраиваемых таблиц, таких как dbo.mycustomers) – Dennis Jaheruddin 29 November 2017 в 13:57
  • 2
    Учитывая, что это «тот же запрос из двух разных баз данных», он, скорее всего, будет иметь одни и те же таблицы. Но да, я регулярно использую этот метод для производственной системы, размещенной на нескольких серверах, и для запросов к таблицам MSDB. – Paul 29 November 2017 в 14:30

попробуйте следующее:

SELECT * FROM OPENROWSET('SQLNCLI', 'Server=YOUR SERVER;Trusted_Connection=yes;','SELECT * FROM Table1') AS a
UNION
SELECT * FROM OPENROWSET('SQLNCLI', 'Server=ANOTHER SERVER;Trusted_Connection=yes;','SELECT * FROM Table1') AS a
14
ответ дан Radim Köhler 18 August 2018 в 10:01
поделиться

Вы можете сделать это с помощью Linked Server.

Обычно связанные серверы настроены так, чтобы позволить Database Engine выполнять оператор Transact-SQL, который включает таблицы в другом экземпляре SQL Server или другой продукт базы данных, такой как как Oracle. Многие типы источников данных OLE DB могут быть настроены как связанные серверы, включая Microsoft Access и Excel.

Связанные серверы обладают следующими преимуществами:

  • Возможность доступа к данным из-за пределов SQL Server.
  • Возможность выдавать распределенные запросы, обновления , команды и транзакции на гетерогенных источниках данных по всему предприятию.
  • Возможность одинаково обращаться к различным источникам данных.

Подробнее о Связанные серверы .

Выполните следующие шаги для создания связанного сервера:

  1. Объекты сервера -> Связанные серверы -> Новый связанный сервер
  2. Предоставить удаленный сервер Имя.
  3. Выберите тип удаленного сервера (SQL Server или другое).
  4. Выберите Безопасность -> сделайте это с помощью этого контекста безопасности и укажите логин и пароль удаленного сервера.
  5. Нажмите «ОК» и вы закончите !!

Здесь - это простой учебник по созданию связанного сервера.

ИЛИ

g18]

Вы можете добавить связанный сервер с помощью запроса.

Синтаксис:

sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ] 
     [ , [ @provider= ] 'provider_name' ]
     [ , [ @datasrc= ] 'data_source' ] 
     [ , [ @location= ] 'location' ] 
     [ , [ @provstr= ] 'provider_string' ] 
     [ , [ @catalog= ] 'catalog' ] 

Подробнее о sp_addlinkedserver .

Вы должны создать связанный сервер только один раз. После создания связанного сервера мы можем запросить его следующим образом:

select * from LinkedServerName.DatabaseName.OwnerName.TableName
79
ответ дан Raging Bull 18 August 2018 в 10:01
поделиться
  • 1
    Примечание: см. здесь о том, как иметь имя сервера как нечто отличное от имени хоста / порта. – Richard 11 February 2015 в 11:07
  • 2
    Немного оконечности, здесь, если у вас возникли проблемы с sp_addlinkedserver. Создайте сервер в диалоговом окне - убедитесь, что он работает - затем щелкните правой кнопкой мыши соединение и выберите скрипт [t связанный сервер AS create – Richard Housham 19 August 2016 в 09:59

Создал определение Linked Server на одном сервере другому (вам нужно SA для этого), а затем просто ссылайтесь на них с 4-парным именованием (см. BOL).

2
ответ дан RBarryYoung 18 August 2018 в 10:01
поделиться
SELECT
        *
FROM
        [SERVER2NAME].[THEDB].[THEOWNER].[THETABLE]

Вы также можете посмотреть на использование связанных серверов. Связанными серверами могут быть и другие типы источников данных, такие как платформы DB2. Это один из способов попыток доступа к DB2 с помощью SQLQL TSQL или Sproc call ...

24
ответ дан RSolberg 18 August 2018 в 10:01
поделиться
  • 1
    будет ли этот метод работать все время? каковы сценарии, в которых это может потерпеть неудачу? – Steam 14 January 2014 в 23:50
  • 2
    Подтверждено, что это не удается в моем env, ошибка говорит, что мне нужно использовать addlinkedserver – gorlaz 14 March 2017 в 04:32
  • 3
    Это работает для всех, без использования Linked Server? – Doug S 13 February 2018 в 01:34
  • 4
    проверены и получены ошибки Could not find server '88.208.229.164' in sys.servers. Verify that the correct server name was specified. If necessary, execute the stored procedure sp_addlinkedserver to add the server to sys.servers. – WhatsThePoint 11 April 2018 в 10:07

Да, вы можете.

Я думаю, вы спрашиваете, как, поэтому я отвечу на это.

То, что вы ищете, это Linked Servers. Вы можете получить их в SSMS из следующего местоположения в дереве Object Explorer:

Server Objects-->Linked Servers

или вы можете использовать sp_addlinkedserver .

Вам нужно только настроить его. После этого вы можете вызвать таблицу на другом сервере следующим образом:

select
    *
from
    LocalTable,
    [OtherServerName].[OtherDB].[dbo].[OtherTable]

Обратите внимание, что владелец не всегда dbo, поэтому обязательно замените его любой используемой схемой .

283
ответ дан Steve Taylor 18 August 2018 в 10:01
поделиться
  • 1
    мы можем сделать это без связанных серверов? – Steam 14 January 2014 в 23:49
  • 2
    @Eric, Где объекты сервера в SSMS? – Tsahi Asher 15 September 2014 в 06:36
  • 3
    @TsahiAsher. Когда вы подключаетесь к серверу, объекты сервера - это папка в дереве обозревателя объектов. – Eric 25 September 2014 в 16:52
  • 4
    Если не известно, вы также можете опустить схему для использования по умолчанию. Например. [OtherServerName].[OtherDB]..[OtherTable] Однако лучше всего включить его, если он известен. – Tom Bowers 14 October 2015 в 12:03

Запрос через две разные базы данных - это распределенный запрос. Ниже приведен список некоторых методов плюс плюсы и минусы:

  1. Связанные серверы: обеспечить доступ к более широкому спектру источников данных, чем репликация SQL Server обеспечивает
  2. Связанные серверы: Подключайтесь к источникам данных, которые не поддерживают репликацию или которые требуют специального доступа
  3. Связанные серверы: выполняйте лучше, чем OPENDATASOURCE или OPENROWSET
  4. Функции OPENDATASOURCE и OPENROWSET: удобны для извлечения данных из источников данных на разовой основе. OPENROWSET также имеет BULK-объекты, которые могут / не могут содержать файл формата, который может быть fiddley
  5. OPENQUERY: не поддерживает переменные
  6. Все являются решениями T-SQL. Относительно легко реализовать и настроить
  7. Все зависит от соединения между источником и удалением, что может повлиять на производительность и масштабируемость
17
ответ дан Tim 18 August 2018 в 10:01
поделиться
3
ответ дан ChrisM 6 September 2018 в 22:29
поделиться
3
ответ дан ChrisM 30 October 2018 в 03:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: