SQL Server跨庫訪問

2022-03-01 10:07:22 字數 3208 閱讀 9111

mssqlserver不同伺服器資料庫之間的資料操作

方法1:

--建立鏈結伺服器

exec sp_addlinkedserver   'itsv ', ' ', 'sqloledb ', '遠端伺服器名或ip位址'

exec sp_addlinkedsrvlogin  'itsv ', 'false ',null, '使用者名稱', '密碼'

--查詢示例

select * from itsv.資料庫名.dbo.表名

--匯入示例

select * into 表 from itsv.資料庫名.dbo.表名

--以後不再使用時刪除鏈結伺服器

exec sp_dropserver  'itsv ', 'droplogins '

方法2:

--連線遠端/區域網資料(openrowset/openquery/opendatasource)

--1、openrowset

--查詢示例

select * from openrowset( 'sqloledb ', 'sql伺服器名 '; '使用者名稱 '; '密碼 ',資料庫名.dbo.表名)

--生成本地表

select * into 表 from openrowset( 'sqloledb ', 'sql伺服器名 '; '使用者名稱 '; '密碼 ',資料庫名.dbo.表名)

--把本地表匯入遠端表

insert openrowset( 'sqloledb ', 'sql伺服器名 '; '使用者名稱 '; '密碼 ',資料庫名.dbo.表名)

select *from 本地表

--更新本地表

update b

set b.列a=a.列a

from openrowset( 'sqloledb ', 'sql伺服器名 '; '使用者名稱 '; '密碼 ',資料庫名.dbo.表名)as a inner join 本地表 b

on a.column1=b.column1

方法3:

--openquery用法需要建立乙個連線

--首先建立乙個連線建立鏈結伺服器

exec sp_addlinkedserver   'itsv ', ' ', 'sqloledb ', '遠端伺服器名或ip位址 '

--查詢

select *

from openquery(itsv,  'select *  from 資料庫.dbo.表名 ')

--把本地表匯入遠端表

insert openquery(itsv,  'select *  from 資料庫.dbo.表名 ')

select * from 本地表

--更新本地表

update b

set b.列b=a.列b

from openquery(itsv,  'select * from 資料庫.dbo.表名 ') as a 

inner join 本地表 b on a.列a=b.列a

方法4:

--3、opendatasource/openrowset

select   *

from   opendatasource( 'sqloledb ',  'data source=ip/servername;user id=登陸名;password=密碼 ' ).test.dbo.roy_ta

--把本地表匯入遠端表

insert opendatasource( 'sqloledb ',  'data source=ip/servername;user id=登陸名;password=密碼 ').資料庫.dbo.表名

select * from 本地表

/************** 自我整理 ****************/

/* 建立遠端資料庫連線*/

exec sp_addlinkedserver 'itsv', //遠端連線名

' ',

'sqloledb',

'192.168.200.3\sqlexpress'; // 要訪問的伺服器

/* 登入資料庫伺服器*/

exec sp_addlinkedsrvlogin 'itsv', //遠端連線名

'false',

null,

'sa', //遠端資料庫登入名

'sa123'; //遠端資料庫登入密碼

/* 測試跨庫查詢是否執行*/

select *

from

itsv.dbvideo.dbo.td_camera_list;

[遠端連線名].[ 資料庫名].dbo.[該資料庫下的目標表名]

/* 刪除遠端資料庫連線*/

exec sp_droplinkedsrvlogin 'itsv', null;

exec sp_dropserver 'itsv';

exec sp_dropserver 'itsv', 'droplogins';

/* 檢視已存在的連線實體類*/

sp_helpserver select * from sys.sysservers

附:儲存過程名/檢視名 作用 舉例

sp_addlinkedserver 註冊遠端資料庫例項 exec sp_addlinkedserver 『instancename』

sp_dropserver 刪除遠端資料庫例項 exec sp_dropserver 『instancename』

sp_addlinkedsrvlogin 註冊遠端例項登陸訪問帳戶 exec sp_addlinkedsrvlogin 『instancename』, null

sp_droplinkedsrvlogin 刪除遠端例項登陸訪問帳戶 exec sp_droplinkedsrvlogin 'instancename','username'

sp_helpserver 當前例項已註冊的可訪問的例項(即檢視使用sp_addlinkedserver已註冊過的例項) sp_helpserver

sys.sysservers 功能同sp_helpserver select * from sys.sysservers

sys.linked_logins 檢視已註冊的登陸訪問帳戶(即檢視使用sp_addlinkedsrvlogin已註冊過的帳戶) select * from sys.linked_logins

sys.remote_logins 檢視已註冊的遠端訪問帳戶 select * from sys.remote_logins

sql server 跨庫訪問

最近在做跨庫來訪問不在同乙個資料庫的資料,語法格式如下所示 select from opendatasource sqloledb data source 遠端ip user id sa password 密碼 庫名.dbo.表名 根據該語法格式我寫了乙個語句如下所示 select from ope...

跨庫訪問 Oracle和sqlserver

from 一 在sqlserver中連線另乙個sqlserver庫資料 exec master.dbo.sp addlinkedserver server n 別名 srvproduct n 庫名 provider n sqloledb datasrc n 伺服器位址 exec master.dbo...

SQLServer 跨資料庫訪問

首先,你要知道跨資料庫訪問的語法,如下 select from openrowset sqloledb driver server 伺服器位址 uid sa pwd 密碼 資料庫名.dbo.表名 如果沒有啟用ad hoc distributed queries,查詢結果是出錯的,如下描述 exec ...