用openrowset連接遠程SQL或插入數(shù)據(jù)
--如果只是臨時訪問,可以直接用openrowset
--查詢示例
select * from openrowset('SQLOLEDB'
,'sql服務器名';'用戶名';'密碼'
,數(shù)據(jù)庫名.dbo.表名)
--導入示例
select * into 表 from openrowset('SQLOLEDB'
,'sql服務器名';'用戶名';'密碼'
,數(shù)據(jù)庫名.dbo.表名)
--創(chuàng)建鏈接服務器
exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','遠程服務器名或ip地址'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用戶名','密碼'
go
--查詢示例
select * from srv_lnk.數(shù)據(jù)庫名.dbo.表名
--導入示例
select * into 表 from srv_lnk.數(shù)據(jù)庫名.dbo.表名
--以后不再使用時刪除鏈接服務器
exec sp_dropserver 'srv_lnk','droplogins'
go
--下面的示例訪問來自某個表的數(shù)據(jù),該表在 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表的數(shù)據(jù)
備注:
1、關于鏈接服務器的詳細情況請參閱聯(lián)機叢書中的sp_addlinkedserver、 sp_addlinkedsrvlogin、sp_addserver、sp_dropserver、sp_serveroption、sp_linkedservers等系統(tǒng)級存儲過程。
2、關于此鏈接服務器的創(chuàng)建及其使用在不同環(huán)境下(全部內網(wǎng)服務器、一內網(wǎng)一公網(wǎng)服務器、全公網(wǎng)服務器)測試,均告通過。
3、有時候在存儲過程中訪問鏈接服務器的時候可能會碰到如下的提示,必須要對ANSI warning 和ANSI nulls進行設置,這時候按照如下的方法進行設置:
設置本地數(shù)據(jù)庫的屬性-->連接-->選上ANSI warning 和 ANSI nulls
如何用sql語句進行跨庫查詢
在機器B上的數(shù)據(jù)庫database2中創(chuàng)建一個臨時表#tmp,
內容就是機器A上的數(shù)據(jù)庫database1里面的Table1。
如何用sql語句完成?(不借用dts等)
SQL code --創(chuàng)建鏈接服務器
exec sp_addlinkedserver 'ITSV','','SQLOLEDB','遠程服務器名或ip地址'
exec sp_addlinkedsrvlogin 'ITSV','false',null,'用戶名','密碼'
--查詢示例
select * from ITSV.數(shù)據(jù)庫名.dbo.表名
--導入示例
select * into 表 from ITSV.數(shù)據(jù)庫名.dbo.表名
--以后不再使用時刪除鏈接服務器
exec sp_dropserver 'ITSV','droplogins'
--連接遠程/局域網(wǎng)數(shù)據(jù)(openrowset/openquery/opendatasource)
--1、openrowset
--查詢示例
select * from openrowset('SQLOLEDB','sql服務器名';'用戶名';'密碼',數(shù)據(jù)庫名.dbo.表名)
--生成本地表
select * into 表 from openrowset('SQLOLEDB','sql服務器名';'用戶名';'密碼',數(shù)據(jù)庫名.dbo.表名)
--把本地表導入遠程表
insert openrowset('SQLOLEDB','sql服務器名';'用戶名';'密碼',數(shù)據(jù)庫名.dbo.表名)
select *from 本地表
--更新本地表
update b
set b.列A=a.列A
from openrowset('SQLOLEDB','sql服務器名';'用戶名';'密碼',數(shù)據(jù)庫名.dbo.表名)as a inner join 本地表 b
on a.column1=b.column1
--openquery用法需要創(chuàng)建一個連接
--首先創(chuàng)建一個連接創(chuàng)建鏈接服務器
exec sp_addlinkedserver 'ITSV','','SQLOLEDB','遠程服務器名或ip地址'
--查詢
select *
FROM openquery(ITSV, 'SELECT * FROM 數(shù)據(jù)庫.dbo.表名')
--把本地表導入遠程表
insert openquery(ITSV, 'SELECT * FROM 數(shù)據(jù)庫.dbo.表名')
select * from 本地表
--更新本地表
update b
set b.列B=a.列B
FROM openquery(ITSV, 'SELECT * FROM 數(shù)據(jù)庫.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=密碼').數(shù)據(jù)庫.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