Den här artikeln ger ett exempel på hur du skapar en länkad server i SQL Server med Transact-SQL. Genom att använda T-SQL kan du skapa den länkade servern utan att förlita dig på ett grafiskt användargränssnitt (som SSMS).
Syntax
För att skapa en länkad server med T-SQL, använd sp_addlinkedserver
systemlagrad procedur.
Den officiella syntaxen ser ut så här:
sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ] [ , [ @provider= ] 'provider_name' ] [ , [ @datasrc= ] 'data_source' ] [ , [ @location= ] 'location' ] [ , [ @provstr= ] 'provider_string' ] [ , [ @catalog= ] 'catalog' ]
De flesta av argumenten är valfria, men du måste ange det länkade servernamnet.
Du kommer förmodligen också att vilja ange datakällan eller platsen för den länkade servern, och kanske ett leverantörsnamn. catalog
argument låter dig ange en standarddatabas som den länkade servern är mappad till. Kolla in den officiella Microsoft-dokumentationen för en förklaring av vart och ett av dessa argument.
Exempel – Skapa den länkade servern
För att skapa en länkad server med T-SQL, kör sp_addlinkedserver
lagrad procedur samtidigt som den skickar in namnet på den länkade servern samt dess källa.
Här är ett exempel på hur du skapar en länkad server:
EXEC sp_addlinkedserver @server=N'Homer', @srvproduct=N'', @provider=N'MSOLEDBSQL', @datasrc=N'172.17.0.2,1433', @catalog='Music';
I det här fallet är det länkade servernamnet "Homer" och jag anger serverns IP-adress, följt av TCP-porten (i mitt fall är det faktiskt en Docker-behållare på samma maskin). Ändra servernamn och IP-adress/port efter behov. Jag anger också en standarddatabas som heter "Musik".
Det här exemplet använder MSOLEDBSQL
som leverantörsnamn, men du kan använda vilket leverantörsnamn som är tillämpligt i din situation. I mitt fall länkar jag till en annan instans av SQL Server.
Observera att MSOLEDBSQL
är den rekommenderade leverantören för SQL Server. Om du tidigare har använt SQLOLEDB
eller SQLNCLI
, båda dessa är nu utfasade. Microsoft beslutade att avskriva OLE DB och släppa den 2018.
Om du skulle länka till Oracle kan du använda OraOLEDB.Oracle
, för MS Access kan du använda Microsoft.Jet.OLEDB.4.0
(för åtkomst till 2002-2003-formaten) eller Microsoft.ACE.OLEDB.12.0
(för 2007 års format). Den officiella dokumentationen har en tabell över parametrar att använda för olika scenarier.
Testa den länkade servern
När du har lagt till den länkade servern kan du använda sp_testlinkedserver
för att testa det:
EXEC sp_testlinkedserver Homer;
Resultat (om framgångsrikt):
Commands completed successfully.
Om du får felet "Inloggning misslyckades" är chansen stor att du inte har en motsvarande inloggning på fjärrservern. Du måste ha en motsvarande inloggning med samma referenser som den på den lokala servern.
Hur det fungerar är att när du först lägger till den länkade servern skapas automatiskt en standardmappning mellan alla inloggningar på den lokala servern och fjärrinloggningar på den länkade servern. SQL Server använder inloggningsuppgifterna för den lokala inloggningen när den ansluter till den länkade servern för inloggningens räkning. Om din lokala inloggning inte har en motsvarande inloggning på fjärrservern får du felmeddelandet "Inloggning misslyckades".
Lägg till en inloggning för den länkade servern
Om du inte vill att den länkade servern ska använda din egen inloggning kan du ange en annan inloggning som den ska använda. Så länge fjärrservern har en motsvarande inloggning med samma referenser är du bra att gå. Självklart måste du se till att fjärrkontot har lämpliga behörigheter för att göra det du behöver.
Här är ett exempel på hur du lägger till en SQL Server-inloggning för den länkade servern.
EXEC sp_addlinkedsrvlogin @rmtsrvname=N'Homer', @useself=N'FALSE', @locallogin=NULL, @rmtuser=N'Marge', @rmtpassword=N'BigStrong#Passw0rd';
Kör detta på den lokala servern efter att du har skapat den länkade servern. Du behöver en motsvarande inloggning med samma referenser på den faktiska (fjärranslutna) servern.
Detta lägger till en inloggning som heter "Marge" för den länkade servern som heter "Homer". Så länge fjärrservern har en inloggning med samma referenser kommer den lokala servern att kunna logga in på den länkade servern.
Se Lägg till en länkad serverinloggning i SQL Server för ett exempel på hur du lägger till en motsvarande inloggning på fjärrservern.
Släpp en länkad server
Här är ett exempel på att ta bort den länkade servern som heter "Homer" och alla associerade inloggningar.
EXEC sp_dropserver 'Homer', 'droplogins';
droplogins
argument är valfritt, men om du inte anger detta när du släpper en länkad server som har associerade fjärr- och länkade serverinloggningsposter, eller är konfigurerad som en replikeringsutgivare, returneras ett felmeddelande.
Se Ta bort en länkad server med T-SQL för fler exempel på hur du tar bort en länkad server.
Kör en distribuerad fråga mot den länkade servern
Nu när vi har skapat den länkade servern, här är ett exempel på att köra en distribuerad fråga mot den:
SELECT * FROM Homer.Music.dbo.Artists;
Den enda skillnaden mellan denna och en lokal fråga är att du måste lägga till det länkade servernamnet till FROM
klausul.
Så här:
LinkedServer.Database.Schema.Table
Alternativt kan du använda OPENQUERY()
för att köra en genomkopplingsfråga:
SELECT * FROM OPENQUERY( Homer, 'SELECT * FROM Music.dbo.Artists;' );