sql訪問遠端的資料庫

2021-09-30 03:20:09 字數 3470 閱讀 6614

使用sql訪問最常用得幾種檔案格式,sql,access,excel,txt。把各自得方法稍微總結了下,希望能有用。

1、訪問sql:

1)、select * from opendatasource('sqloledb','data source=hero;user id=sa').xyjw.dbo.dic_depart

2)、select * from openrowset('sqloledb','hero';'sa';'','select * from xyjw.dbo.dic_folk') as a

3)、先新增鏈結伺服器

exec sp_addlinkedserver @server='hero',@provider='sqloledb',@srvproduct='',@datasrc='遠端伺服器名'

exec sp_addlinkedsrvlogin  @rmtsrvname='hero',@useself='false',@locallogin='',@rmtuser='sa',@rmtpassword='密碼'

select * from hero.xyjw.dbo.dic_folk

2、訪問access

1)、select * from opendatasource('microsoft.jet.oledb.4.0','data source=''e:/教學資訊管理系統.mdb'';')...班級表

2)、select * from openrowset('microsoft.jet.oledb.4.0','e:/教學資訊管理系統.mdb';'admin';'','select * from 班級表') as a

3)、先新增鏈結伺服器 exec sp_addlinkedserver  @server = 'test', @provider = 'microsoft.jet.oledb.4.0', @srvproduct = 'ole db provider for jet',       

@datasrc = 'e:/教學資訊管理系統.mdb'

select * from test...班級表

3、訪問excel

1)、select * from opendatasource( 'microsoft.jet.oledb.4.0','data source="e:/****.xls";user id=admin;password=;extended properties=excel 5.0')... 

[sheet1$]

但此時查詢結果得順序是按照列名得順序排列的,而不是按照電子**中原有的順序。這是 sql server 2000 行集函式 openrowset 和 opendatasource 本身的問題

,與訪問介面引擎無關,也與 excel 版本無關。sql server 2005 的 openrowset 和 opendatasource 不存在這個問題。

2)、select * from openrowset('microsoft.jet.oledb.4.0', 'excel 8.0;hdr=yes;database=e:/****.xls', 'select * from [sheet1$]')  

此種方法可以解決opendatasurce得問題,即查詢結果列得順序與電子**中原有順序一致

3)、使用鏈結伺服器:

exec sp_addlinkedserver @server='xlsserver',@srvproduct='jet4.0',@provider='microsoft.jet.oledb.4.0',@datasrc='e:/****.xls',@provstr='excel   

8.0'

select * from xlsserver...[sheet1$]

此時查詢結果中列得順序是按照列名得順序排列的。

4、訪問txt

1)、select * from openrowset('microsoft.jet.oledb.4.0','text;hdr=yes;database=e:/',a#txt)

2)、select * from opendatasource('microsoft.jet.oledb.4.0','text;hdr=yes;database=e:/')...a#txt

3)、使用鏈結伺服器

exec sp_addlinkedserver @server='txtserver',@srvproduct='jet4.0',@provider='microsoft.jet.oledb.4.0',@datasrc='e:/',@provstr='text'

select * from txtserver...test#txt

例子:name              id          xtype uid

sysrowsetcolumns     4           s     4

sysrowsets           5           s     4

sysallocunits        7           s     4

sysfiles1            null        s     4

syshobtcolumns        ;          s 

上面的方法,是把所有的內容放在一列裡面,如果要分成多個列的話,則需要定義schema.ini檔案。schema.ini要和資料檔案放在同乙個目錄下面

schema.ini檔案的定義方法:

[b.txt]

colnameheader=true

format=tabdelimited

col1=name text width 10

col2=id text width 10

col3=xtype text width 10

col4=uid text width 10

第一行:如果文字檔案的資料有列名,並且作為查詢結果的列名的話,則colnameheader應該為true,否則定義為false,但是如果後面定義了列名的話,則不使用文字檔案中

資料的列名,而使用後面定義的列名。但是如果資料有列名的,最好定義為true,否則的話,資料的列名將作為表中的資料。

第二行:format定義資料的分隔符。一般使用的分隔符有空格,製表符,逗號。分別對應的是delimited( )(注意括號裡應該有乙個空格),tabdelimited,csvdelimited。在選

擇分隔符的時候,建議使用tab,因為這樣的話資料看起來比較整齊,但是不能為了保證資料的嚴格整齊,而在資料當中使用多個tab,這樣的話讀取的資料就會出現錯誤。其他的

逗號和空格同樣。

第三行到最後:制定列名。在這裡需要制定每一列的列名,資料型別。資料型別包括:

microsoft jet資料型別:bit,byte,short,long,currency,single,double,datetime,text,momo。

odbc資料型別:char,float,int,longchar,date.

後面還應該有:指定字符集:使用ansi或者oem

特別資料型別轉換。後面兩個如果沒有特殊情況的話,可以不寫,才用預設的即可。

遠端訪問資料庫

先在本機防火牆開啟3306埠,然後 設定mysql服務允許外網訪問,修改mysql的配置檔案,有的是my.ini,有的是my.cnf linux 1 設定mysql的配置檔案 etc mysql my.cnf 找到 bind address 127.0.0.1 將其注釋掉 作用是使得不再只允許本地訪...

訪問遠端資料庫

所以我們訪問遠端資料庫需要解決兩件事 防火牆 解決方案1 防火牆設定資料庫埠號放行 firewall cmd zone public add port 3306 tcp permanent 給mysql埠放行 解決方案二 關閉防火牆 systemctl stop firewalld.service ...

vc訪問遠端mysql VC遠端訪問資料庫

如果是外面ip,下面的 strsql provider sqloledb server gooyan database skillsbox uid sa pwd aaaaaaaa server改為ip就可以了。區域網的可以是ip,也可以使機器名 按下面的步驟 1.stdafx.h中加入 import...