Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Създайте свързан сървър в SQL Server (пример за T-SQL)

Тази статия предоставя пример за създаване на свързан сървър в SQL Server с помощта на Transact-SQL. Използването на T-SQL ви позволява да създадете свързания сървър, без да разчитате на графичен потребителски интерфейс (като SSMS).

Синтаксис

За да създадете свързан сървър с помощта на T-SQL, използвайте sp_addlinkedserver системна съхранена процедура.

Официалният синтаксис е така:

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

Повечето от аргументите са незадължителни, но ще трябва да предоставите името на свързания сървър.

Вероятно ще искате да посочите източника на данни или местоположението на свързания сървър и може би име на доставчик. catalog аргумент ви позволява да посочите база данни по подразбиране, към която е съпоставен свързаният сървър. Вижте официалната документация на Microsoft за обяснение на всеки от тези аргументи.

Пример – Създайте свързания сървър

За да създадете свързан сървър с помощта на T-SQL, изпълнете sp_addlinkedserver съхранена процедура, докато предава името на свързания сървър, както и неговия източник.

Ето пример за създаване на свързан сървър:

EXEC sp_addlinkedserver 
    @server=N'Homer', 
    @srvproduct=N'', 
    @provider=N'MSOLEDBSQL', 
    @datasrc=N'172.17.0.2,1433',
    @catalog='Music';

В този случай името на свързания сървър е „Homer“ и аз посочвам IP адреса на сървъра, последван от TCP порта (в моя случай това всъщност е Docker контейнер на същата машина). Променете името на сървъра и IP адреса/порта според нуждите. Посочвам също база данни по подразбиране, наречена „Музика“.

Този пример използва MSOLEDBSQL като име на доставчик, но можете да използвате името на доставчика, което е приложимо във вашата ситуация. В моя случай се свързвам с друг екземпляр на SQL Server.

Имайте предвид, че MSOLEDBSQL е препоръчителният доставчик за SQL Server. Ако преди сте използвали SQLOLEDB или SQLNCLI , и двете вече са остарели. Microsoft реши да отмени OLE DB и да го пусне през 2018 г.

Ако трябва да се свържете с Oracle, може да използвате OraOLEDB.Oracle , за MS Access можете да използвате Microsoft.Jet.OLEDB.4.0 (за достъп до форматите 2002-2003) или Microsoft.ACE.OLEDB.12.0 (за формат 2007 г.). Официалната документация има таблица с параметри, които да се използват за различни сценарии.

Тествайте свързания сървър

След като добавите свързания сървър, можете да използвате sp_testlinkedserver за да го тествате:

EXEC sp_testlinkedserver Homer;

Резултат (ако е успешен):

Commands completed successfully.

Ако получите грешка „Неуспешно влизане“, има вероятност да нямате съответното влизане на отдалечения сървър. Ще трябва да имате съответно вход със същите идентификационни данни като този на локалния сървър.

Начинът, по който работи, е, че когато за първи път добавите свързания сървър, автоматично се създава съпоставяне по подразбиране между всички влизания на локалния сървър и отдалечени влизания на свързания сървър. SQL Server използва идентификационните данни на локалния вход, когато се свързва към свързания сървър от името на входа. Ако вашето локално влизане няма съответни данни за вход на отдалечения сървър, тогава ще получите грешка „Неуспешно влизане“.

Добавяне на вход за свързания сървър

Ако не искате свързаният сървър да използва вашето собствено потребителско име, можете да посочите друго потребителско име, което да използва. Докато отдалеченият сървър има съответни данни за вход със същите идентификационни данни, ще бъдете готови. Очевидно ще трябва да се уверите, че отдалеченият акаунт има подходящите разрешения, за да прави това, от което се нуждаете.

Ето пример за добавяне на данни за вход в SQL Server за свързания сървър.

EXEC sp_addlinkedsrvlogin 
    @rmtsrvname=N'Homer', 
    @useself=N'FALSE', 
    @locallogin=NULL, 
    @rmtuser=N'Marge', 
    @rmtpassword=N'BigStrong#Passw0rd';

Изпълнете това на локалния сървър, след като създадете свързания сървър. Ще ви трябва съответни данни за вход със същите идентификационни данни на действителния (отдалечен) свързан сървър.

Това добавя вход, наречен „Marge“ за свързания сървър, наречен „Homer“. Докато отдалеченият сървър има вход със същите идентификационни данни, локалният сървър ще може да влезе в свързания сървър.

Вижте Добавяне на вход на свързан сървър в SQL Server за пример за добавяне на съответни данни за вход на отдалечения сървър.

Изхвърлете свързан сървър

Ето пример за премахване на свързания сървър, наречен „Homer“, и всички свързани данни за влизане.

EXEC sp_dropserver 'Homer', 'droplogins';

droplogins аргументът не е задължителен, но ако не посочите това, когато махнете свързан сървър, който има свързани записи за влизане в отдалечен и свързан сървър или е конфигуриран като издател на репликация, се връща съобщение за грешка.

Вижте Премахване на свързан сървър с T-SQL за повече примери за премахване на свързан сървър.

Изпълнете разпределена заявка срещу свързания сървър

След като създадохме свързания сървър, ето пример за изпълнение на разпределена заявка към него:

SELECT * 
FROM Homer.Music.dbo.Artists;

Единствената разлика между това и локалната заявка е, че трябва да добавите името на свързан сървър към FROM клауза.

Като това:

LinkedServer.Database.Schema.Table

Като алтернатива можете да използвате OPENQUERY() за изпълнение на преходна заявка:

SELECT * 
FROM OPENQUERY(
    Homer, 
    'SELECT * FROM Music.dbo.Artists;'
    );

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Неемоционален логически поглед към конвенциите за именуване на SQL Server

  2. Разберете дали даден дял е компресиран в SQL Server (T-SQL)

  3. Проблеми с репликацията на транзакции на SQL Server

  4. SCOPE_IDENTITY() за GUID?

  5. Производителност на табличните променливи в SQL Server