sp_addlinkedserver (Transact-SQL)
platí pro:SQL Server
azure SQL Managed Instance
Vytvoří propojený server. Propojený server poskytuje přístup k distribuovaným heterogenním dotazům na zdroje dat OLE DB. Po vytvoření propojeného serveru pomocí sp_addlinkedserver
je možné na tomto serveru spustit distribuované dotazy. Pokud je propojený server definován jako instance SQL Serveru, lze spustit vzdálené uložené procedury.
Syntax
sp_addlinkedserver
[ @server = ] N'server'
[ , [ @srvproduct = ] N'srvproduct' ]
[ , [ @provider = ] N'provider' ]
[ , [ @datasrc = ] N'datasrc' ]
[ , [ @location = ] N'location' ]
[ , [ @provstr = ] N'provstr' ]
[ , [ @catalog = ] N'catalog' ]
[ , [ @linkedstyle = ] linkedstyle ]
[ ; ]
Argumenty
[ @server = ] N' server'
Název propojeného serveru, který se má vytvořit. @server je sysname , bez výchozího nastavení.
[ @srvproduct = ] N'srvproduct'
Název produktu zdroje dat OLE DB, který se má přidat jako odkazovaný server.
@srvproduct je nvarchar(128), s výchozím NULL
. Pokud je hodnota SQL Server
, @provider, @datasrc, @location, @provstra @catalog není nutné zadaná.
[ @provider = ] PoskytovatelN''
Jedinečný programový identifikátor (PROGID) zprostředkovatele OLE DB, který odpovídá tomuto zdroji dat.
@provider musí být jedinečné pro zadaného zprostředkovatele OLE DB nainstalovaného v aktuálním počítači.
@provider je nvarchar(128), s výchozím NULL
.
V SQL Serveru 2019 (15.x) a starších verzích, pokud @provider vynecháte,
SQLNCLI
se použije. PoužitíSQLNCLI
přesměruje SQL Server na nejnovější verzi zprostředkovatele OLE DB nativního klienta SQL Serveru. Očekává se, že bude zprostředkovatel OLE DB zaregistrovaný v zadaném rozhraní PROGID v registru. MístoSQLNCLI
se doporučujeMSOLEDBSQL
.Počínaje SQL Serverem 2022 (16.x) musíte zadat název zprostředkovatele.
MSOLEDBSQL
se doporučuje. Pokud @providervynecháte, můžete zaznamenat neočekávané chování.
Důležitý
Z SQL Serveru 2022 (16.x) a SQL Server Management Studio 19 (SSMS) byla odebrána nativní ho klienta SQL Serveru (často zkrácená SNAC). Pro nový vývoj se nedoporučuje zprostředkovatele SQL Server Native Client OLE DB (SQLNCLI nebo SQLNCLI11) ani starší verze zprostředkovatele Microsoft OLE DB pro SQL Server (SQLOLEDB). Přejděte na nový ovladač Microsoft OLE DB (MSOLEDBSQL) pro SQL Server dále.
[ @datasrc = ] N'datasrc'
Název zdroje dat, který interpretuje zprostředkovatel OLE DB.
@datasrc je nvarchar(4000), s výchozím NULL
.
@datasrc se předává jako vlastnost DBPROP_INIT_DATASOURCE
pro inicializaci zprostředkovatele OLE DB.
[ @location = ] N'umístění'
Umístění databáze, jak je interpretováno poskytovatelem OLE DB.
@location je nvarchar(4000), s výchozím NULL
.
@location se předá jako vlastnost DBPROP_INIT_LOCATION
pro inicializaci zprostředkovatele OLE DB.
[ @provstr = ] N'provstr'
Připojovací řetězec specifický pro zprostředkovatele OLE DB, který identifikuje jedinečný zdroj dat.
@provstr je nvarchar(4000), s výchozím NULL
. Argument provstr se buď předá IDataInitialize, nebo je nastaven jako vlastnost DBPROP_INIT_PROVIDERSTRING
pro inicializaci zprostředkovatele OLE DB.
Při vytvoření propojeného serveru pomocí zprostředkovatele OLE DB nativního klienta SYSTÉMU SQL Server lze instanci určit pomocí klíčového slova SERVER
jako SERVER=servername\instancename
určit konkrétní instanci SQL Serveru. Název serveru je název počítače, na kterém běží SQL Server, a název instance je název konkrétní instance SYSTÉMU SQL Server, ke kterému bude uživatel připojen.
Pro přístup ke zrcadlené databázi musí připojovací řetězec obsahovat název databáze. Tento název je nezbytný k povolení pokusů o převzetí služeb při selhání poskytovatelem přístupu k datům. Databázi lze zadat v parametru @provstr nebo @catalog. Volitelně může připojovací řetězec také zadat název partnera pro převzetí služeb při selhání.
Pokud spustíte
sp_addlinkedserver
z místního přihlášení nebo přihlášení, které není součástí role správce systému, může se zobrazit následující chyba:Access to the remote server is denied because no login-mapping exists.
Pokud chcete tento problém vyřešit, přidejte do připojovacího řetězce parametr
User ID
. V následujícím příkladumyUser
je ID uživatele předané připojovacímu řetězci:EXEC master.dbo.sp_addlinkedserver @server = N'LinkServerName', @provider = N'SQLNCLI', @srvproduct = 'MS SQL Server', @provstr = N'SERVER=serverName\InstanceName;User ID=myUser' EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'LinkServerName', @locallogin = NULL, @useself = N'False', @rmtuser = N'myUser', @rmtpassword = N'*****'
Další informace naleznete v tématu Přístup ke vzdálenému serveru je odepřen, protože neexistuje mapování přihlášení.
[ @catalog = ] Katalog N''
Katalog, který se má použít při vytvoření připojení k zprostředkovateli OLE DB.
@catalog je sysname , s výchozím NULL
.
@catalog se předá jako vlastnost DBPROP_INIT_CATALOG
pro inicializaci zprostředkovatele OLE DB. Pokud je odkazovaný server definován proti instanci SYSTÉMU SQL Server, katalog odkazuje na výchozí databázi, na kterou je odkazovaný server mapován.
[ @linkedstyle = ] linkedstyle
Určeno pouze pro informační účely. Nepodporuje se. Budoucí kompatibilita není zaručena.
Návratové hodnoty kódu
0
(úspěch) nebo 1
(selhání).
Sada výsledků
Žádný.
Poznámky
Následující tabulka ukazuje způsoby nastavení propojeného serveru pro zdroje dat, ke kterým je možné přistupovat prostřednictvím OLE DB. Propojený server lze nastavit více než jeden způsob pro konkrétní zdroj dat; Pro typ zdroje dat může existovat více než jeden řádek. Tato tabulka také ukazuje sp_addlinkedserver
hodnoty parametrů, které se mají použít k nastavení propojeného serveru.
Vzdálený zdroj dat OLE DB | Zprostředkovatel OLE DB | @srvproduct | @provider | @datasrc | @location | @provstr | @catalog |
---|---|---|---|---|---|---|---|
SQL Server | Zprostředkovatel OLE DB nativního klienta SQL Serveru | SQL Server 1 (výchozí) | |||||
SQL Server | Zprostředkovatel OLE DB nativního klienta SQL Serveru | SQLNCLI |
Název sítě SQL Serveru (pro výchozí instanci) | Název databáze (volitelné) | |||
SQL Server | Zprostředkovatel OLE DB nativního klienta SQL Serveru | SQLNCLI |
název_serveru\název_instance (pro konkrétní instanci) | Název databáze (volitelné) | |||
Oracle verze 8 a novější | Zprostředkovatel Oracle pro OLE DB | Jakýkoliv | OraOLEDB.Oracle |
Alias pro databázi Oracle | |||
Přístup/Jet | Zprostředkovatel Microsoft OLE DB pro Jet | Jakýkoliv | Microsoft.Jet.OLEDB.4.0 |
Úplná cesta k souboru databáze Jet | |||
Zdroj dat ODBC | Zprostředkovatel Microsoft OLE DB pro ROZHRANÍ ODBC | Jakýkoliv | MSDASQL |
Systémový název DSN zdroje dat ODBC | |||
Zdroj dat ODBC | Zprostředkovatel Microsoft OLE DB pro ROZHRANÍ ODBC | Jakýkoliv | MSDASQL |
Připojovací řetězec ODBC | |||
Systém souborů | Zprostředkovatel Microsoft OLE DB pro službu indexování | Jakýkoliv | MSIDXS |
Název katalogu služby indexování | |||
Tabulka Aplikace Microsoft Excel | Zprostředkovatel Microsoft OLE DB pro Jet | Jakýkoliv | Microsoft.Jet.OLEDB.4.0 |
Úplná cesta k excelovém souboru | Excel 5.0 | ||
Databáze IBM Db2 | Zprostředkovatel Microsoft OLE DB pro DB2 | Jakýkoliv | DB2OLEDB |
Viz dokumentace k zprostředkovateli Microsoft OLE DB pro DB2. | Název katalogu databáze DB2 |
1 Tímto způsobem nastavení propojeného serveru vynutíte, aby název propojeného serveru byl stejný jako název sítě vzdálené instance SQL Serveru. K určení serveru použijte @datasrc.
2 "Any" označuje, že název produktu může být cokoli.
Zprostředkovatel OLE DB nativního klienta SQL Serveru je zprostředkovatel, který se používá s SQL Serverem, pokud není zadán žádný název zprostředkovatele nebo pokud je sql Server zadán jako název produktu. I když zadáte starší název zprostředkovatele, SQLOLEDB se při zachování v katalogu změní na SQLNCLI.
Parametry @datasrc, @location, @provstra @catalog identifikují databázi nebo databáze, na které odkazuje odkazovaný server. Pokud je některý z těchto parametrů NULL
, odpovídající vlastnost inicializace OLE DB není nastavena.
Pokud v clusterovém prostředí zadáte názvy souborů odkazující na zdroje dat OLE DB, použijte název UNC (Universal Nameming Convention Name) nebo sdílenou jednotku k určení umístění.
Uložená procedura sp_addlinkedserver
nelze spustit v rámci uživatelem definované transakce.
Důležitý
Spravovaná instance Azure SQL v současné době podporuje jako vzdálené zdroje dat pouze SQL Server, SQL Database a další spravované instance SQL.
Důležitý
Při vytváření propojeného serveru pomocí sp_addlinkedserver
se pro všechna místní přihlášení přidá výchozí vlastní mapování. U jiných poskytovatelů než SQL Serveru můžou být přihlášení ověřená sql Serverem schopná získat přístup k zprostředkovateli v rámci účtu služby SYSTÉMU SQL Server. Správci by měli zvážit použití sp_droplinkedsrvlogin <linkedserver_name>, NULL
k odebrání globálního mapování.
Dovolení
Příkaz sp_addlinkedserver
vyžaduje oprávnění ALTER ANY LINKED SERVER
. (Dialogové okno sql Server Management Studio Nový propojený server je implementováno způsobem, který vyžaduje členství v správce systému pevné role serveru.)
Příklady
A. Použití zprostředkovatele MICROSOFT SQL Server OLE DB
Následující příklad vytvoří propojený server s názvem SEATTLESales
. Název produktu je SQL Server
a nepoužívá se žádný název poskytovatele.
USE master;
GO
EXEC sp_addlinkedserver
N'SEATTLESales',
N'SQL Server';
GO
Následující příklad vytvoří propojený server S1_instance1
na instanci SQL Serveru pomocí ovladače OLE DB systému SQL Server.
EXEC sp_addlinkedserver
@server=N'S1_instance1',
@srvproduct=N'',
@provider=N'MSOLEDBSQL',
@datasrc=N'S1\instance1';
Následující příklad vytvoří propojený server S1_instance1
na instanci SQL Serveru pomocí zprostředkovatele OLE DB nativního klienta SQL Serveru.
Důležitý
Zprostředkovatel OLE DB nativního klienta SQL Serveru (SQLNCLI) zůstává zastaralý a nedoporučuje se ho používat pro novou vývojovou práci. Místo toho použijte nový ovladač Microsoft OLE DB pro SQL Server (MSOLEDBSQL), který bude aktualizován nejnovějšími funkcemi serveru.
EXEC sp_addlinkedserver
@server=N'S1_instance1',
@srvproduct=N'',
@provider=N'SQLNCLI',
@datasrc=N'S1\instance1';
B. Použití zprostředkovatele Microsoft OLE DB pro Microsoft Access
Zprostředkovatel Microsoft.Jet.OLEDB.4.0 se připojuje k databázím Microsoft Accessu, které používají formát 2002–2003. Následující příklad vytvoří propojený server s názvem SEATTLE Mktg
.
Poznámka
V tomto příkladu se předpokládá, že jsou nainstalovány aplikace Microsoft Access i ukázková databáze Northwind
a že Northwind
databáze se nachází v umístění C:\Msoffice\Access\Samples na stejném serveru jako instance SQL Serveru.
EXEC sp_addlinkedserver
@server = N'SEATTLE Mktg',
@provider = N'Microsoft.Jet.OLEDB.4.0',
@srvproduct = N'OLE DB Provider for Jet',
@datasrc = N'C:\MSOffice\Access\Samples\Northwind.mdb';
GO
C. Použití zprostředkovatele Microsoft OLE DB pro ODBC s parametrem datasrc
Následující příklad vytvoří propojený server s názvem SEATTLE Payroll
, který používá zprostředkovatele Microsoft OLE DB pro ODBC (MSDASQL
) a @datasrc parametr.
Poznámka
Před použitím propojeného serveru musí být zadaný název zdroje dat ODBC definován jako název DSN systému na serveru.
EXEC sp_addlinkedserver
@server = N'SEATTLE Payroll',
@srvproduct = N'',
@provider = N'MSDASQL',
@datasrc = N'LocalServer';
GO
D. Použití zprostředkovatele Microsoft OLE DB pro excelovou tabulku
Pokud chcete vytvořit definici propojeného serveru pomocí zprostředkovatele Microsoft OLE DB pro Jet pro přístup k excelové tabulce ve formátu 1997 –2003, nejprve vytvořte pojmenovanou oblast v Aplikaci Excel zadáním sloupců a řádků listu aplikace Excel, které chcete vybrat. Na název oblasti se pak dá v distribuovaném dotazu odkazovat jako na název tabulky.
EXEC sp_addlinkedserver 'ExcelSource',
'Jet 4.0',
'Microsoft.Jet.OLEDB.4.0',
'c:\MyData\DistExcl.xls',
NULL,
'Excel 5.0';
GO
Pokud chcete získat přístup k datům z excelové tabulky, přidružte oblast buněk k názvu. Následující dotaz lze použít pro přístup k zadané pojmenované oblasti SalesData
jako tabulku pomocí dříve nastaveného propojeného serveru.
SELECT *
FROM ExcelSource...SalesData;
GO
Pokud sql Server běží pod účtem domény, který má přístup ke vzdálené sdílené složce, můžete místo namapované jednotky použít cestu UNC.
EXEC sp_addlinkedserver 'ExcelShare',
'Jet 4.0',
'Microsoft.Jet.OLEDB.4.0',
'\\MyServer\MyShare\Spreadsheets\DistExcl.xls',
NULL,
'Excel 5.0';
E. Použití zprostředkovatele Microsoft OLE DB pro Jet pro přístup k textovému souboru
Následující příklad vytvoří propojený server pro přímý přístup k textovým souborům bez propojení souborů jako tabulek v accessovém .mdb souboru. Zprostředkovatel je Microsoft.Jet.OLEDB.4.0
a řetězec zprostředkovatele je Text
.
Zdroj dat je úplná cesta k adresáři, který obsahuje textové soubory. Soubor schema.ini, který popisuje strukturu textových souborů, musí existovat ve stejném adresáři jako textové soubory. Další informace o tom, jak vytvořit soubor schema.ini, najdete v dokumentaci k databázovému stroji Jet.
Nejprve vytvořte propojený server.
EXEC sp_addlinkedserver txtsrv, N'Jet 4.0',
N'Microsoft.Jet.OLEDB.4.0',
N'c:\data\distqry',
NULL,
N'Text';
Nastavte mapování přihlášení.
EXEC sp_addlinkedsrvlogin txtsrv, FALSE, Admin, NULL;
Zobrazí seznam tabulek na propojeném serveru.
EXEC sp_tables_ex txtsrv;
Zadejte dotaz na jednu z tabulek, v tomto případě file1#txt
pomocí čtyřdílného názvu.
SELECT * FROM txtsrv...[file1#txt];
F. Použití zprostředkovatele Microsoft OLE DB pro DB2
Následující příklad vytvoří propojený server s názvem DB2
, který používá zprostředkovatele Microsoft OLE DB pro DB2.
EXEC sp_addlinkedserver @server = N'DB2',
@srvproduct = N'Microsoft OLE DB Provider for DB2',
@catalog = N'DB2',
@provider = N'DB2OLEDB',
@provstr = N'Initial Catalog=pubs;
Data Source=DB2;
HostCCSID=1252;
Network Address=XYZ;
Network Port=50000;
Package Collection=admin;
Default Schema=admin;';
G. Přidání databáze Azure SQL jako propojeného serveru pro použití s distribuovanými dotazy v cloudových a místních databázích
Databázi Azure SQL můžete přidat jako odkazovaný server a pak ji použít s distribuovanými dotazy, které pokrývají místní a cloudové databáze. Jedná se o součást pro hybridní řešení databáze, která pokrývají místní podnikové sítě a cloud Azure.
Produkt SQL Server box obsahuje funkci distribuovaného dotazu, která umožňuje psát dotazy pro kombinování dat z místních zdrojů dat a dat ze vzdálených zdrojů (včetně dat z jiných zdrojů dat než SQL Serveru) definovaných jako propojené servery. Každou databázi Azure SQL (s výjimkou databáze master
logického serveru) je možné přidat jako samostatný propojený server a pak ji použít přímo v databázových aplikacích jako jakoukoli jinou databázi.
Mezi výhody používání služby Azure SQL Database patří možnosti správy, vysoká dostupnost, škálovatelnost, práce se známým vývojovým modelem a relační datový model. Požadavky vaší databázové aplikace určují, jak by používala Službu Azure SQL Database v cloudu. Všechna data můžete přesunout najednou do Služby Azure SQL Database nebo postupně přesunout některá data a zachovat zbývající data místně. Pro takovou hybridní databázovou aplikaci je teď možné službu Azure SQL Database přidat jako propojené servery a databázová aplikace může vydávat distribuované dotazy ke kombinování dat z Azure SQL Database a místních zdrojů dat.
Tady je příklad vysvětlující, jak se připojit k databázi Azure SQL pomocí distribuovaných dotazů.
Nejprve přidejte jednu databázi Azure SQL jako odkazovaný server pomocí nativního klienta SQL Serveru.
EXEC sp_addlinkedserver
@server = 'LinkedServerName',
@srvproduct = '',
@provider = 'sqlncli',
@datasrc = 'ServerName.database.windows.net',
@location = '',
@provstr = '',
@catalog = 'DatabaseName';
Přidejte přihlašovací údaje a možnosti na tento odkazovaný server. Nahraďte <password>
platným heslem.
EXEC sp_addlinkedsrvlogin
@rmtsrvname = 'LinkedServerName',
@useself = 'false',
@rmtuser = 'LoginName',
@rmtpassword = '<password>';
EXEC sp_serveroption 'LinkedServerName', 'rpc out', true;
Teď pomocí propojeného serveru můžete spouštět dotazy pomocí čtyřdílných názvů, a to i k vytvoření nové tabulky a vložení dat.
EXEC ('CREATE TABLE SchemaName.TableName(col1 int not null CONSTRAINT PK_col1 PRIMARY KEY CLUSTERED (col1) )') at LinkedServerName;
EXEC ('INSERT INTO SchemaName.TableName VALUES(1),(2),(3)') at LinkedServerName;
Dotazování na data pomocí čtyřdílných názvů:
SELECT * FROM LinkedServerName.DatabaseName.SchemaName.TableName;
H. Vytvoření propojeného serveru spravované instance Azure SQL s ověřováním spravovaných identit
Pokud chcete vytvořit propojený server s ověřováním spravované identity, spusťte následující příkaz T-SQL a nahraďte <managed_instance>
vlastní spravovanou instancí SQL. Metoda ověřování používá ActiveDirectoryMSI
v parametru @provstr. Volitelně zvažte použití @locallogin = NULL
, abyste povolili všechna místní přihlášení.
EXEC master.dbo.sp_addlinkedserver
@server = N'MyLinkedServer',
@srvproduct = N'',
@provider = N'MSOLEDBSQL',
@provstr = N'Server=<mi_name>.<dns_zone>.database.windows.net,1433;Authentication=ActiveDirectoryMSI;';
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname = N'MyLinkedServer',
@useself = N'False',
@locallogin = N'user1@contoso.com';
Pokud chcete povolit ověřování pomocí spravovaných identit, musí být spravovaná identita přiřazená ke službě Azure SQL Managed Instance přidána jako přihlášení ke vzdálené spravované instanci. Podporují se spravované identity přiřazené systémem i spravované uživatelem.
Pokud je nastavená primární identita, použije se, jinak se použije spravovaná identita přiřazená systémem. Pokud se spravovaná identita znovu vytvoří se stejným názvem, je potřeba znovu vytvořit přihlášení ke vzdálené instanci, protože nové ID aplikace spravované identity a identifikátor SID instančního objektu služby SQL Managed Instance se už neshodují. Pokud chcete tyto dvě hodnoty ověřit, převeďte identifikátor SID na ID aplikace s následujícím dotazem.
SELECT convert(uniqueidentifier, sid) as MSEntraApplicationID
FROM sys.server_principals
WHERE name = '<managed_instance_name>';
Já. Vytvoření propojeného serveru služby SQL Managed Instance s předávacím ověřováním Microsoft Entra
Pokud chcete vytvořit propojený server s předávacím ověřováním, spusťte následující příkaz T-SQL a nahraďte <managed_instance>
vlastním serverem spravované instance SQL:
EXEC master.dbo.sp_addlinkedserver
@server = N'MyLinkedServer',
@srvproduct = N'',
@provider = N'MSOLEDBSQL',
@datasrc = N'<mi_name>.<dns_zone>.database.windows.net,1433';
Při předávacím ověřování se kontext zabezpečení místního přihlášení přenáší do vzdálené instance. Předávací ověřování vyžaduje přidání instančního objektu Microsoft Entra jako přihlášení k místní i vzdálené službě Azure SQL Managed Instance. Obě spravované instance musí být ve skupině důvěryhodnosti serveru . Po splnění požadavků se uživatel může přihlásit k místní instanci a dotazovat se na vzdálenou instanci prostřednictvím objektu propojeného serveru.
Související obsah
- uložené procedury distribuované dotazy (Transact-SQL)
- sp_addlinkedsrvlogin (Transact-SQL)
- sp_addserver (Transact-SQL)
- sp_dropserver (Transact-SQL)
- sp_serveroption (Transact-SQL)
- sp_setnetname (Transact-SQL)
- uložené procedury systému (Transact-SQL)
- systémových tabulek (Transact-SQL)