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

跨資料庫資料交互實戰:同實例與跨實例兩大方案

     編輯:關於SqlServer

場景一:同 SQL Server 實例內跨資料庫

最簡單:[資料庫名].dbo.表名

SELECT * FROM [DestinationDBName].dbo.DestinationTableName;

場景二:跨 SQL Server 實例

方案 A:連結伺服器 — 標準、持久、支援分散式交易

1. 建立連結伺服器

EXEC sp_addlinkedserver 
    @server = 'DestAlias',           -- 連結伺服器別名
    @srvproduct = '',
    @provider = 'SQLOLEDB',
    @datasrc = 'DestServerIP\InstanceName';  -- IP\實例名,預設實例可省略

2. 建立登入對應

EXEC sp_addlinkedsrvlogin 
    @rmtsrvname = 'DestAlias',
    @useself = 'false',
    @locallogin = NULL,
    @rmtuser = 'UserName',
    @rmtpassword = 'Password';

3. 使用四部份名稱查詢

SELECT * FROM [DestAlias].dbo.DestinationTableName;

4. 用畢移除(臨時連結)

EXEC sp_dropserver 
    @server = 'DestAlias',
    @droplogins = 'droplogins';

方案 B:OPENDATASOURCE / OPENROWSET — 臨時、無需建立物件、適合 Ad-hoc

OPENDATASOURCE

SELECT * 
FROM OPENDATASOURCE(
    'SQLOLEDB', 
    'Data Source=DestServerIP;User ID=UserName;Password=Password'
).[DestDBName].dbo.DestinationTableName;

OPENROWSET

SELECT * 
FROM OPENROWSET(
    'SQLOLEDB',
    'DestServerIP', 'UserName', 'Password',
    'SELECT * FROM [DestDBName].dbo.DestinationTableName'
);

OPENQUERY

需先建立連結伺服器,屬方案 A 變體,此處不贅述。

選擇指南

需求推薦方案
長期、頻繁、需分散式交易連結伺服器
一次性、臨時、腳本化部署OPENDATASOURCE/OPENROWSET
同實例跨庫三部份名稱 [DB].dbo.Table

安全提醒

  • 連結伺服器密碼加密儲存,但 sp_addlinkedsrvlogin 明文傳遞,建議在安全通道執行
  • Ad-hoc 方案避免硬編碼密碼,使用應用層配置注入
  • 跨實例查詢開啟 Ad Hoc Distributed Queries 選項:EXEC sp_configure 'Ad Hoc Distributed Queries', 1; RECONFIGURE;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved