Dit artikel geeft een voorbeeld van het maken van een gekoppelde server in SQL Server met Transact-SQL. Door T-SQL te gebruiken, kunt u de gekoppelde server maken zonder afhankelijk te zijn van een grafische gebruikersinterface (zoals SSMS).
Syntaxis
Om een gekoppelde server te maken met T-SQL, gebruikt u de sp_addlinkedserver
systeem opgeslagen procedure.
De officiële syntaxis gaat als volgt:
sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ] [ , [ @provider= ] 'provider_name' ] [ , [ @datasrc= ] 'data_source' ] [ , [ @location= ] 'location' ] [ , [ @provstr= ] 'provider_string' ] [ , [ @catalog= ] 'catalog' ]
De meeste argumenten zijn optioneel, maar u moet de naam van de gekoppelde server opgeven.
U wilt waarschijnlijk ook de gegevensbron of locatie van de gekoppelde server specificeren, en misschien een providernaam. De catalog
argument stelt u in staat een standaarddatabase op te geven waaraan de gekoppelde server is toegewezen. Bekijk de officiële Microsoft-documentatie voor een uitleg van elk van deze argumenten.
Voorbeeld – Maak de gekoppelde server
Om een gekoppelde server te maken met T-SQL, voert u de sp_addlinkedserver
. uit opgeslagen procedure terwijl de naam van de gekoppelde server en de bron worden doorgegeven.
Hier is een voorbeeld van het maken van een gekoppelde server:
EXEC sp_addlinkedserver @server=N'Homer', @srvproduct=N'', @provider=N'MSOLEDBSQL', @datasrc=N'172.17.0.2,1433', @catalog='Music';
In dit geval is de naam van de gekoppelde server "Homer" en specificeer ik het IP-adres van de server, gevolgd door de TCP-poort (in mijn geval is het eigenlijk een Docker-container op dezelfde machine). Wijzig indien nodig de servernaam en het IP-adres/de poort. Ik specificeer ook een standaarddatabase met de naam "Muziek".
Dit voorbeeld gebruikt MSOLEDBSQL
als de providernaam, maar u kunt de providernaam gebruiken die in uw situatie van toepassing is. In mijn geval link ik naar een ander exemplaar van SQL Server.
Merk op dat MSOLEDBSQL
is de aanbevolen provider voor SQL Server. Als u eerder SQLOLEDB
heeft gebruikt of SQLNCLI
, beide zijn nu verouderd. Microsoft heeft besloten OLE DB ongedaan te maken en in 2018 uit te brengen.
Als u naar Oracle zou linken, zou u OraOLEDB.Oracle
. kunnen gebruiken , voor MS Access kunt u Microsoft.Jet.OLEDB.4.0
gebruiken (voor Access de 2002-2003 formaten) of Microsoft.ACE.OLEDB.12.0
(voor het 2007-formaat). De officiële documentatie bevat een tabel met parameters die voor verschillende scenario's kunnen worden gebruikt.
Test de gekoppelde server
Nadat u de gekoppelde server heeft toegevoegd, kunt u sp_testlinkedserver
. gebruiken om het te testen:
EXEC sp_testlinkedserver Homer;
Resultaat (indien succesvol):
Commands completed successfully.
Als u de foutmelding "Aanmelden mislukt" krijgt, is de kans groot dat u geen overeenkomstige aanmelding op de externe server hebt. U moet een overeenkomstige login hebben met dezelfde inloggegevens als die op de lokale server.
De manier waarop het werkt, is dat wanneer u de gekoppelde server voor het eerst toevoegt, automatisch een standaardtoewijzing wordt gemaakt tussen alle aanmeldingen op de lokale server en externe aanmeldingen op de gekoppelde server. SQL Server gebruikt de referenties van de lokale login bij het verbinden met de gekoppelde server namens de login. Als uw lokale login geen corresponderende login op de externe server heeft, krijgt u de foutmelding "Aanmelden mislukt".
Voeg een login toe voor de gekoppelde server
Als u niet wilt dat de gekoppelde server uw eigen login gebruikt, kunt u een andere login specificeren om te gebruiken. Zolang de externe server een overeenkomstige login heeft met dezelfde inloggegevens, bent u klaar om te gaan. Het is duidelijk dat u ervoor moet zorgen dat het externe account de juiste machtigingen heeft om te doen wat u wilt.
Hier is een voorbeeld van het toevoegen van een SQL Server-login voor de gekoppelde server.
EXEC sp_addlinkedsrvlogin @rmtsrvname=N'Homer', @useself=N'FALSE', @locallogin=NULL, @rmtuser=N'Marge', @rmtpassword=N'BigStrong#Passw0rd';
Voer dit uit op de lokale server nadat u de gekoppelde server hebt gemaakt. U hebt een overeenkomstige login nodig met dezelfde inloggegevens op de daadwerkelijke (externe) gekoppelde server.
Dit voegt een login toe genaamd "Marge" voor de gekoppelde server genaamd "Homer". Zolang de externe server een login heeft met dezelfde inloggegevens, kan de lokale server inloggen op de gekoppelde server.
Zie Een gekoppelde serveraanmelding toevoegen in SQL Server voor een voorbeeld van het toevoegen van een overeenkomstige aanmelding op de externe server.
Laat een gekoppelde server vallen
Hier is een voorbeeld van het verwijderen van de gekoppelde server genaamd "Homer" en alle bijbehorende logins.
EXEC sp_dropserver 'Homer', 'droplogins';
De droplogins
argument is optioneel, maar als u dit niet opgeeft bij het verwijderen van een gekoppelde server met gekoppelde externe en gekoppelde serveraanmeldingen, of is geconfigureerd als een replicatie-uitgever, wordt een foutbericht geretourneerd.
Zie Een gekoppelde server verwijderen met T-SQL voor meer voorbeelden van het verwijderen van een gekoppelde server.
Voer een gedistribueerde query uit op de gekoppelde server
Nu we de gekoppelde server hebben gemaakt, is hier een voorbeeld van het uitvoeren van een gedistribueerde query ertegen:
SELECT * FROM Homer.Music.dbo.Artists;
Het enige verschil tussen deze en een lokale zoekopdracht is dat je de gekoppelde servernaam moet toevoegen aan de FROM
clausule.
Zoals dit:
LinkedServer.Database.Schema.Table
U kunt ook OPENQUERY()
. gebruiken om een pass-through-query uit te voeren:
SELECT * FROM OPENQUERY( Homer, 'SELECT * FROM Music.dbo.Artists;' );