首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 連結伺服器技術全攻略:MySQL、Oracle、文字檔、Access、SQL Server、Sybase 互連

     編輯:關於SqlServer

前言

連結伺服器 讓 SQL Server 能對異質 OLE DB/ODBC 資料來源執行分散式查詢。本文彙整六大常見連結對象的建立與查詢語法,含提供者選擇、驅動程式安裝、登入對應與實戰注意事項。

一、連結 MySQL(Microsoft OLE DB Provider for ODBC)

前置作業

  1. 安裝 MySQL ODBC 驅動程式 (MySQL Connector/ODBC)。
  2. 「系統 DSN」建立資料來源名稱 (DSN),例:myDSN,指向目標 MySQL 資料庫。

建立連結伺服器

EXEC sp_addlinkedserver 
    @server = 'MySQLTest', 
    @srvproduct = 'MySQL', 
    @provider = 'MSDASQL', 
    @datasrc = 'myDSN';
GO

EXEC sp_addlinkedsrvlogin 
    @rmtsrvname = 'MySQLTest', 
    @useself = 'false', 
    @locallogin = 'sa', 
    @rmtuser = 'mysql_user', 
    @rmtpassword = 'mysql_pwd';
GO

查詢語法

-- 必須使用 OPENQUERY
SELECT * FROM OPENQUERY(MySQLTest, 'SELECT * FROM `table_name`');
-- 錯誤寫法:四部分命名不支援 MySQL
-- SELECT * FROM MySQLTest...table_name

二、連結 Oracle(Microsoft OLE DB Provider for Oracle)

建立連結伺服器

EXEC sp_addlinkedserver 
    @server = 'OraLink', 
    @srvproduct = 'Oracle', 
    @provider = 'MSDAORA', 
    @datasrc = 'Oracle_TNS_Name';
GO

EXEC sp_addlinkedsrvlogin 
    @rmtsrvname = 'OraLink', 
    @useself = 'false', 
    @locallogin = 'sa', 
    @rmtuser = 'ora_user', 
    @rmtpassword = 'ora_pwd';
GO

查詢與執行程序

-- 四部分命名(全部大寫)
SELECT * FROM OraLink..SCHEMA_NAME.TABLE_NAME;

-- 執行預存程序
SELECT * FROM OPENQUERY(OraLink, 'BEGIN schema.proc_name; END;');

三、連結格式化文字檔(Jet OLE DB Provider)

EXEC sp_addlinkedserver 
    @server = 'txtsrv', 
    @srvproduct = 'Jet 4.0', 
    @provider = 'Microsoft.Jet.OLEDB.4.0', 
    @datasrc = 'C:\Data\TextFiles', 
    @provstr = 'Text';
GO

EXEC sp_addlinkedsrvlogin @rmtsrvname = 'txtsrv', @useself = 'false', @locallogin = 'sa', @rmtuser = 'Admin', @rmtpassword = NULL;
GO

-- 查詢(需同目錄下有 schema.ini 定義欄位格式)
SELECT * FROM txtsrv...[file1#txt];

四、連結 SQL Server(最常用)

方式 A:SQL Server Native Client (SQLOLEDB) - 推薦

EXEC sp_addlinkedserver 
    @server = 'SQLLink', 
    @provider = 'SQLNCLI11',  -- 或 SQLOLEDB
    @datasrc = '192.168.1.200';  -- 遠端 IP/主機名
GO

EXEC sp_addlinkedsrvlogin 
    @rmtsrvname = 'SQLLink', 
    @useself = 'false', 
    @locallogin = 'sa', 
    @rmtuser = 'remote_user', 
    @rmtpassword = 'remote_pwd';
GO

-- 四部分命名直接查詢
SELECT * FROM SQLLink.RemoteDB.dbo.RemoteTable;
INSERT LocalDB.dbo.LocalTable SELECT * FROM SQLLink.RemoteDB.dbo.RemoteTable;
SELECT * INTO LocalDB.dbo.NewTable FROM SQLLink.RemoteDB.dbo.RemoteTable;

方式 B:ODBC (MSDASQL) - 相容舊版

EXEC sp_addlinkedserver 
    @server = 'SQLLinkODBC', 
    @provider = 'MSDASQL', 
    @provstr = 'DRIVER={SQL Server};SERVER=192.168.1.200;UID=remote_user;PWD=remote_pwd;';
GO

五、連結 Access (Jet OLE DB)

EXEC sp_addlinkedserver 
    @server = 'AccessLink', 
    @provider = 'Microsoft.Jet.OLEDB.4.0', 
    @datasrc = 'C:\Data\Northwind.mdb';
GO

SELECT * FROM AccessLink...TableName;

六、連結 Sybase

前置:安裝 Sybase Open Client / ODBC 驅動並建立系統 DSN

EXEC sp_addlinkedserver 
    @server = 'SybaseLink', 
    @provider = 'MSDASQL', 
    @provstr = 'Driver={Sybase System 11};Database=hisdb;Srvr=10.211.135.12;UID=sa;PWD=1111;';
GO

SELECT * FROM SybaseLink.hisdb.dbo.table1;

關鍵限制與注意事項

限制說明因應
SET IDENTITY_INSERT 不支援跨連結伺服器無法遠端開啟身分插入在遠端伺服器本機執行
SELECT * INTO 跨連結伺服器可能失敗中繼資料鎖定衝突先在本地建立目標表,再 INSERT ... SELECT
分散式交易 (MSDTC) 必須啟用跨伺服器 UPDATE/INSERT/DELETE 需 MSDTC服務管理員啟用 MSDTC、防火牆開 135/動態埠
四部分命名不支援 MySQL/Oracle/文字檔僅 SQL Server 間支援統一使用 OPENQUERY 或 OPENROWSET
效能:遠端篩選下推盡量在 OPENQUERY 內完成 WHERE/JOIN避免拉回大量資料再本地過濾

刪除連結伺服器

EXEC sp_droplinkedsrvlogin 'LinkName', 'local_login';
EXEC sp_dropserver 'LinkName', 'droplogins';
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved