T-SQL——關於跨庫連接查詢


shanzm-2021年8月28日 16:56:34

0. 同一台服務器不同數據庫

同一個服務器中在一個連接查詢不同的數據庫中的表,可以在表名前加上數據庫的名為前綴

【示例】

select * from 數據庫.dbo.表


1. 使用跨庫查詢函數——OpenDataSource()

在不同服務器中,一個服務器的連接中查詢另外一個服務器中的數據庫,可以在sql語句中使用OpenDataSource('sqloledb','server=服務器IP地址;uid=數據庫登陸用戶;pwd=密碼').數據庫名.dbo.表名

【示例】

select * from OpenDataSource('sqloledb','server=xxx.xxx.xxx.xxx;uid=sa;pwd=*****').database_name.dbo.table_name

【說明】

  • OpenDataSource()函數不接受參數變量。只能是寫死指定的連接字符串,不能使用變量,所以在存儲過程中不能動態的設置OpenDataSource()參數,這一點及其的不安全&不方便

  • 使用OpenDataSource()函數需要啟用一些高級配置選項:

    • 第一次使用的時候,可能會提示:
    消息 15281,級別 16,狀態 1,第 1 行
    SQL Server 阻止了對組件“Ad Hoc Distributed Queries”的 STATEMENT“OpenRowset/OpenDatasource”的訪問,因為此組件已作為此服務器安全配置的一部分而被      關閉。系統管理員可以通過使用 sp_configure 啟用“Ad Hoc Distributed Queries”。有關啟用“Ad Hoc Distributed Queries”的詳細信息,請搜索 SQL Server       聯機叢書中的“Ad Hoc Distributed Queries”。
    

    可以在當前連接的數據庫中,通過以下語句開啟該組件

    exec sp_configure 'show advanced options',1
    reconfigure
    exec sp_configure 'Ad Hoc Distributed Queries',1
    reconfigure
    

    關閉上述組件可以執行一下語句:

    exec sp_configure 'Ad Hoc Distributed Queries',0
    reconfigure
    exec sp_configure 'show advanced options',0
    reconfigure
    


2. 使用鏈接服務器(Linking Server)

  1. 使用圖形界面創建鏈接服務器:

    創建鏈接服務器,可以使用MSSMS-->服務器對象-->鏈接服務器-->右鍵:新建鏈接服務器

    常規:

    • 鏈接服務器:服務器IP地址
    • 服務器類型:選擇SQL Server

    安全性:

    • 選中使用此安全上下文建立連接
    • 輸入用戶名和密碼
  2. 使用存儲過程創建鏈接服務器

當前服務器的連接中,同時執行以下存儲過程,創建其他服務器(即目標服務器)為鏈接服務器

exec sp_addlinkedserver--創建鏈接服務器
@server='鏈接名稱',--要訪問的服務器別名(一般就是直接使用服務器地址)
@srvproduct='',
@provider='SQLOLEDB',
@datasrc='目標服務器地址'--要訪問的服務器地址
go
exec sp_addlinkedsrvlogin--添加鏈接服務器的登陸用戶
'鏈接名稱',--被訪問的服務器別名
'false',
 null,
'用戶名',--目標服務器賬號
'密碼'--目標服務器密碼

示例:從鏈接服務器中查詢

select * from 鏈接服務器別名.database_name.dbo.table_name


3. 使用OpenDataSource()函數和鏈接服務器的使用區別

  • OpenDataSource()功能相對鏈接服務器少一些
  • 對於需要頻繁訪問的數據源,要將其設置為鏈接服務器,而不是使用OpenDataSource
  • OpenDataSoucre()每次調用都明文提供連接字符串,包含密碼,相對不安全


4. 參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM