sql >> Databáze >  >> RDS >> Sqlserver

Vytvoření propojeného serveru v SQL Server (příklad T-SQL)

Tento článek poskytuje příklad vytvoření propojeného serveru v SQL Server pomocí Transact-SQL. Použití T-SQL vám umožňuje vytvořit propojený server bez spoléhání se na grafické uživatelské rozhraní (jako je SSMS).

Syntaxe

Chcete-li vytvořit propojený server pomocí T-SQL, použijte sp_addlinkedserver systémová uložená procedura.

Oficiální syntaxe vypadá takto:

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

Většina argumentů je volitelná, ale budete muset zadat název propojeného serveru.

Pravděpodobně budete také chtít zadat zdroj dat nebo umístění propojeného serveru a možná i název poskytovatele. catalog argument umožňuje zadat výchozí databázi, na kterou je připojený server mapován. Vysvětlení každého z těchto argumentů naleznete v oficiální dokumentaci společnosti Microsoft.

Příklad – Vytvořte propojený server

Chcete-li vytvořit propojený server pomocí T-SQL, spusťte sp_addlinkedserver uložená procedura při předávání názvu propojeného serveru i jeho zdroje.

Zde je příklad vytvoření propojeného serveru:

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

V tomto případě je název propojeného serveru „Homer“ a specifikuji IP adresu serveru, za kterou následuje TCP port (v mém případě je to vlastně kontejner Docker na stejném počítači). Podle potřeby změňte název serveru a IP adresu/port. Také specifikuji výchozí databázi s názvem „Music“.

Tento příklad používá MSOLEDBSQL jako název poskytovatele, ale můžete použít libovolný název poskytovatele, který je ve vaší situaci vhodný. V mém případě se propojuji s jinou instancí SQL Server.

Všimněte si, že MSOLEDBSQL je doporučeným poskytovatelem pro SQL Server. Pokud jste dříve používali SQLOLEDB nebo SQLNCLI , oba jsou nyní zastaralé. Microsoft se rozhodl zrušit podporu OLE DB a vydat ji v roce 2018.

Pokud byste se chtěli připojit k Oracle, můžete použít OraOLEDB.Oracle , pro MS Access můžete použít Microsoft.Jet.OLEDB.4.0 (pro přístup k formátům 2002-2003) nebo Microsoft.ACE.OLEDB.12.0 (pro formát 2007). Oficiální dokumentace obsahuje tabulku parametrů pro použití pro různé scénáře.

Otestujte propojený server

Po přidání propojeného serveru můžete použít sp_testlinkedserver vyzkoušet:

EXEC sp_testlinkedserver Homer;

Výsledek (pokud je úspěšný):

Commands completed successfully.

Pokud se zobrazí chyba „Přihlášení se nezdařilo“, je pravděpodobné, že na vzdáleném serveru nemáte odpovídající přihlášení. Budete muset mít odpovídající přihlašovací údaje se stejnými přihlašovacími údaji, jaké máte na místním serveru.

Funguje to tak, že když poprvé přidáte propojený server, automaticky se vytvoří výchozí mapování mezi všemi přihlášeními na místním serveru a vzdálenými přihlášeními na propojeném serveru. SQL Server používá pověření místního přihlášení při připojování k propojenému serveru jménem přihlášení. Pokud vaše místní přihlášení nemá odpovídající přihlašovací údaje na vzdáleném serveru, zobrazí se chyba „Přihlášení se nezdařilo“.

Přidat přihlašovací jméno pro propojený server

Pokud nechcete, aby propojený server používal vaše vlastní přihlášení, můžete pro něj zadat jiné přihlašovací jméno. Pokud má vzdálený server odpovídající přihlašovací údaje se stejnými přihlašovacími údaji, můžete začít. Je zřejmé, že se budete muset ujistit, že vzdálený účet má příslušná oprávnění k tomu, co potřebujete.

Zde je příklad přidání přihlášení k serveru SQL pro propojený server.

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

Po vytvoření propojeného serveru to spusťte na místním serveru. Budete potřebovat odpovídající přihlašovací údaje se stejnými přihlašovacími údaji na skutečném (vzdáleném) propojeném serveru.

Tím se přidá přihlašovací jméno s názvem „Marge“ pro propojený server s názvem „Homer“. Pokud má vzdálený server přihlašovací údaje se stejnými pověřeními, bude se místní server moci přihlásit k propojenému serveru.

Příklad přidání odpovídajícího přihlášení na vzdáleném serveru najdete v tématu Přidání přihlášení k propojenému serveru na SQL Server.

Zrušte propojený server

Zde je příklad zrušení propojeného serveru s názvem „Homer“ a všech souvisejících přihlášení.

EXEC sp_dropserver 'Homer', 'droplogins';

droplogins argument je volitelný, ale pokud jej nezadáte při rušení propojeného serveru, který má přidružené přihlašovací položky vzdáleného a propojeného serveru nebo je nakonfigurován jako vydavatel replikace, vrátí se chybová zpráva.

Další příklady zrušení propojeného serveru naleznete v tématu Odebrání propojeného serveru pomocí T-SQL.

Spusťte distribuovaný dotaz na propojeném serveru

Nyní, když jsme vytvořili propojený server, zde je příklad spuštění distribuovaného dotazu proti němu:

SELECT * 
FROM Homer.Music.dbo.Artists;

Jediný rozdíl mezi tímto a místním dotazem je v tom, že musíte přidat název propojeného serveru do FROM doložka.

Takhle:

LinkedServer.Database.Schema.Table

Případně můžete použít OPENQUERY() pro spuštění předávacího dotazu:

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

  1. Jak formátovat data v Oracle

  2. Jeden bezpečnostní systém pro aplikaci, sdružování připojení a PostgreSQL – případ LDAP

  3. SELECT FOR XML AUTO a vrátit datové typy

  4. Jak získat záznamy mezi 2 daty v MySQL