1. 程式人生 > >SQLServer跨庫查詢--分散式查詢 用openrowset連線遠端SQL或插入資料

SQLServer跨庫查詢--分散式查詢 用openrowset連線遠端SQL或插入資料

–如果只是臨時訪問,可以直接用openrowset

–查詢示例

select * from openrowset(‘SQLOLEDB’

,’sql伺服器名’;’使用者名稱’;’密碼’

,資料庫名.dbo.表名)

–匯入示例

select * into 表 from openrowset(‘SQLOLEDB’

,’sql伺服器名’;’使用者名稱’;’密碼’

,資料庫名.dbo.表名)

–建立連結伺服器

exec sp_addlinkedserver ‘srv_lnk’,”,’SQLOLEDB’,’遠端伺服器名或ip地址’

exec sp_addlinkedsrvlogin ‘srv_lnk’,’false’,null,’使用者名稱’,’密碼’

go

–查詢示例

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

–匯入示例

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

–以後不再使用時刪除連結伺服器

exec sp_dropserver ‘srv_lnk’,’droplogins’

go

–下面的示例訪問來自某個表的資料,該表在 SQL Server 的另一個例項中。

SELECT *FROM OPENDATASOURCE(‘SQLOLEDB’,’Data Source=ServerName;User ID=MyUID;Password=MyPass’).Northwind.dbo.Categories

下面是個查詢的示例,它通過用於 Jet 的 OLE DB 提供程式查詢 Excel 電子表格。

SELECT *FROM OpenDataSource( ‘Microsoft.Jet.OLEDB.4.0’,’Data Source=”c:Financeaccount.xls”;User ID=Admin;Password=;Extended properties=Excel 5.0’)…xactions

例如:

SELECT *

FROM OPENQUERY(Far_MDB, ‘SELECT * FROM MDB_Member’)

這就是從我的連結伺服器當中去查詢MDB_Member表的資料

備註:

1、關於連結伺服器的詳細情況請參閱聯機叢書中的sp_addlinkedserver、 sp_addlinkedsrvlogin、sp_addserver、sp_dropserver、sp_serveroption、sp_linkedservers等系統級儲存過程。

2、關於此連結伺服器的建立及其使用在不同環境下(全部內網伺服器、一內網一公網伺服器、全公網伺服器)測試,均告通過。

3、有時候在儲存過程中訪問連結伺服器的時候可能會碰到如下的提示,必須要對ANSI warning 和ANSI nulls進行設定,這時候按照如下的方法進行設定:

設定本地資料庫的屬性–>連線–>選上ANSI warning 和 ANSI nulls

如何用sql語句進行跨庫查詢

在機器B上的資料庫database2中建立一個臨時表#tmp,

內容就是機器A上的資料庫database1裡面的Table1。

如何用sql語句完成?(不借用dts等)

SQL code –建立連結伺服器

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’

–連線遠端/區域網資料(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

–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

–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 本地表

用 連結伺服器

OPENROWSET

OPENDATASOURCE

都可以

連結伺服器.database1.dbo.table1

連結伺服器.database1.dbo.table1

SQL code

select * into #

from openrowset(‘sqloledb’,’ip’;’sa’;”,’select * from pubs.dbo.jobs’)

如果只是偶爾使用 就用opendatasource/openrowset 固定的頻繁使用建linked server