MSSQL跨服務(wù)器連接的幾種方法
下面對; MSSQL 跨服務(wù)器連接的方式總結(jié)一下:
1OPENDATASOURCE
在SQL文中直接用此語句打開數(shù)據(jù)庫,示例
OPENDATASOURCE( 'SQLOLEDB', 'Data Source=TQDBSV001;User ID=fish;Password=2312').RackDB.dbo.CS
很簡單,但是速度很慢。
2; OPENROWSET
不想打字了,網(wǎng)上粘得,我試驗(yàn)過可以用,但我沒有用,致使多一種方法而已。我不知道他有什么特別的用途!
包括從 OLE DB 資料來源存取遠(yuǎn)端資料需要的所有連線資訊。這個(gè)方法是在連結(jié)伺服器存取資料表的替代方法,而且是使用 OLE DB 連線與存取遠(yuǎn)端資料的一次、特定的方法。OPENROWSET 函數(shù)可以在查詢的 FROM 子句中當(dāng)作資料表名稱來參考。根據(jù) OLE DB Provider 的能力,OPENROWSET 函數(shù)也可以當(dāng)作 Insert、Update 或 Delete 陳述式的目標(biāo)資料表來參考。雖然查詢可能會傳回多個(gè)結(jié)果集,OPENROWSET 只傳回第一個(gè)結(jié)果集。語法OPENROWSET ( 'provider_name' , { 'datasource' ; 'user_id' ; 'password' | 'provider_string' } , { [ catalog.] [ schema.] object | 'query' } ) 引數(shù)'provider_name'代表登錄中指定的 OLE DB Provider 的親和名稱之字元字串。provider_name 沒有預(yù)設(shè)值。'datasource'是對應(yīng)到特殊 OLE DB 資料來源的字串常數(shù)。datasource 是要傳送到提供者 IDBProperties 介面以初始化提供者的 DBPROP_INIT_DATASOURCE 屬性。一般而言,此字串包括資料庫檔案名稱、資料庫伺服器名稱或提供者了解并用以尋找資料庫的名稱。'user_id'是要傳送到指定的 OLE DB Provider 的使用者名稱字串常數(shù)。user_id 指定連線的安全性內(nèi)容且以 DBPROP_AUTH_USERID 屬性傳送以初始化提供者。'password'是要傳送到 OLE DB Provider 的使用者密碼字串常數(shù)。初始化提供者時(shí),password 以 DBPROP_AUTH_PASSWORD 屬性傳送。'provider_string'是以 DBPROP_INIT_PROVIDERSTRING 屬性傳送以初始化 OLE DB Provider 的特定提供者連線字串。provider_string 一般會包含所有初始化提供者時(shí)需要的所有連線資訊。catalog是有指定物件的資料庫目錄或資料庫名稱。schema是指定物件的結(jié)構(gòu)描述或物件擁有者名稱。object唯一指定要操作的物件之物件名稱。'query'傳送到提供者并由提供者執(zhí)行的字串常數(shù)。MicrosoftR SQL Server? 不處理此查詢,但處理由提供者傳回的查詢結(jié)果 (傳遞查詢)。傳遞查詢用在不經(jīng)由資料表名稱而只經(jīng)由命令語言顯露其表格資料的提供者時(shí),非常有用。只要查詢提供者支援 OLE DB Command 物件及其強(qiáng)制介面,遠(yuǎn)端伺服器就支援傳遞查詢。如需詳細(xì)資訊,請參閱 SQL Server OLE DB Programmer's Reference。備注如果 OLE DB Provider 支援指定的資料來源中的多個(gè)目錄與結(jié)構(gòu)描述,就需要資料庫目錄與結(jié)構(gòu)描述名稱。如果 OLE DB Provider 不支援,可以省略 catalog 與 schema 的值。如果提供者只支援結(jié)構(gòu)描述名稱,必須指定 schema.object 格式之兩個(gè)部份的名稱。如果提供者只支援資料庫目錄名稱,必須指定 catalog.schema.object 格式之三個(gè)部份的名稱。OPENROWSET 不接受變數(shù)作為其引數(shù)。權(quán)限OPENROWSET 權(quán)限由傳送到 OLE DB Provider 的使用者名稱的權(quán)限來決定。范例A. 使用有 Select 的OPENROWSET 與 Microsoft OLE DB Provider for SQL Server以下范例使用 Microsoft OLE DB Provider for SQL Server,以存取命名為 seattle1 的遠(yuǎn)端伺服器上 pubs 資料庫的 authors 資料表。從 datasource、user_id 與 password 初始化提供者,且使用 Select 來定義傳回的資料列集。格式:Select a.*FROM OPENROWSET('SQLOLEDB’,'ServerName';'LoginUser';'Password', 'Select * FROM [DatabaseName].dbo.TableName orDER BY ColName1, ColName12') AS a說明:查詢所提供的驅(qū)動程序(SQLOLEDB是查詢SQL Server),查詢SQL服務(wù)器ServerName下的Databasename中的數(shù)據(jù)TableName表中的數(shù)據(jù)(SQL語句),其實(shí)用戶權(quán)限是LoginUser。例子:USE pubsGOSelect a.*FROM OPENROWSET('SQLOLEDB','seattle1';'sa';'MyPass', 'Select * FROM pubs.dbo.authors orDER BY au_lname, au_fname') AS aGOB. 使用有物件的 OPENROWSET 與 OLE DB Provider for ODBC以下范例使用 OLE DB Provider for ODBC 與 SQL Server ODBC 驅(qū)動程式,來存取命名為 seattle1 的遠(yuǎn)端伺服器上 pubs 資料庫的 authors 資料表。以 ODBC 提供者使用的 ODBC 語法指定之 provider_string 來初始化提供者,并使用 catalog.schema.object 語法來定義傳回的資料列集。格式:這連接方式是ODBC數(shù)據(jù)的驅(qū)動程序Select a.*FROM OPENROWSET('MSDASQL', 'DRIVER={SQL Server};SERVER=ServerName;UID=LoginUser;PWD=Password, [DatabaseName].dbo.TableName) AS aorDER BY ColName1, ColName12USE pubsGOSelect a.*FROM OPENROWSET('MSDASQL', 'DRIVER={SQL Server};SERVER=seattle1;UID=sa;PWD=MyPass', pubs.dbo.authors) AS aorDER BY a.au_lname, a.au_fnameGOC. 使用 Microsoft OLE DB Provider for Jet以下范例藉由Microsoft OLE DB Provider for Jet 存取 Microsoft Access Northwind 資料庫中的 orders 資料表。1.附注 以下范例假設(shè)已經(jīng)安裝 Access。1、USE pubsGOSelect a.*FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'c:MSOfficeAccessSamplesorthwind.mdb';'admin';'mypwd', orders) AS aGO2、select * from openrowset('Microsoft.Jet.OLEDB.4.0', 'E:StudyAccesstest.mdb';'admin';'','select * from student')或Select a.*FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0', 'E:StudyAccesstest.mdb';'admin';'', student) AS a2.是以Excel為例,必須安裝了Excelselect * from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE=G:WorkEveryDayDayDoOrderList',OrderList$) DATABASE=G:WorkEveryDayDayDoOrderList'是Excel的表名及路徑,OrderList$是工作區(qū)的名字MICROSOFT.JET.OLEDB.4.0是Excel的驅(qū)動程序,也可以用MICROSOFT.JET.OLEDB.5.0,MICROSOFT.JET.OLEDB.8.0,我測試所用的window 2003及SQL Server 2000其中OrderList$所面的$不能少,要不能報(bào)錯(cuò),$是代表是工作區(qū)3.以VFP(DBF文件名)select * from openrowset('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=D:','select * from [temp.DBF]')說明:SourceType是數(shù)據(jù)源類型,SourceDB是數(shù)據(jù)源,后面是操作DBF的SQL查詢語句。D. 使用 OPENROWSET 與 INNER JOIN 中的其他資料表以下范例選取儲存在相同電腦上 SQL Server Northwind 資料庫的 customers 資料表的所有資料,以及 Access Northwind 資料庫的 orders 資料表的所有資料。附注 以下范例假設(shè)已經(jīng)安裝 Access。USE pubsGOSelect c.*, o.*FROM Northwind.dbo.Customers AS c INNER JOIN OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'c:MSOfficeAccessSamplesorthwind.mdb';'admin';'mypwd', orders) AS o ON c.CustomerID = o.CustomerID GOE.將存儲過程的記錄集插入到虛擬表中(執(zhí)行的存儲不策有全局虛擬表)如:Select * into #tFROM OPENQUERY([192.168.42.43], 'exec [Order].dbo.Or_Select_BackListDetail ''BK0607190001''')如下:就會報(bào)錯(cuò),必須先建表create table #t,而且此虛擬表的參數(shù)一定要與存儲過程的參數(shù)一樣。Insert into #texec [Order].dbo.Or_Select_BackListDetail 'BK0607190001'F:將打開的相應(yīng)的文件(dbf,exec等等),從SQL里插入數(shù)據(jù)進(jìn)行insert into;--select * from openrowset('MSDASQL', 'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=d:','select * from temp.DBF') select top 100 orderno,shipto from ordermaster注:1、兩數(shù)字段結(jié)構(gòu)一樣(長度、類型)2、保證導(dǎo)出表沒有為null或空的字段3、將你上面的語句改為下面的select*fromtmp.DBF,就是不要那個(gè)[]
3; 建立鏈接服務(wù)器;
ifexists(select1frommaster..sysserverswheresrvname='ls_Source') execsp_dropserver'ls_Source','droplogins'goexecsp_addlinkedserver'ls_Source', 'ms','SQLOLEDB','TAODBSV001' goEXEC sp_addlinkedsrvlogin 'ls_Source','false','sa','read',''