MSSQL鏈接常用數據庫(一)

原文地址  
使用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
    特別數據類型轉換。後面兩個如果沒有特殊情況的話,可以不寫,才用默認的即可

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章