熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL Server >> 正文

在SQLServer成批導入數據

2013-11-15 14:41:47  來源: SQL Server 

  在軟件項目實施的時候數據導入一直是項目人員比較頭疼的問題其實在SQL Server中集成了很多成批導入數據的方法有些項目實施顧問頭疼的問題在我們數據庫管理員眼中是小菜一碟現在的重點就是如何讓用戶了解這些方法讓數據導入變得輕松一些

  第一種方法使用Select Into語句

  若企業數據庫都采用的是SQL Server數據庫的話則可以利用Select Into語句來實現數據的導入Select Into語句他的作用就是把數據從另外一個數據庫中查詢出來然後加入到某個用戶指定的表中

  在使用這條語句的時候需要注意幾個方面的內容

  一是需要在目的數據庫中先建立相關的表如想把進銷存系統數據庫(SQLServer)中的產品信息表(Product)導入到ERP系統中的產品信息表(M_Product)中則前期是在ERP系統的數據庫中已經建立了這張產品信息表

  二是這種方法只復制表中的數據而不復制表中的索引如在進銷存系統數據中的產品信息表中在產品編號產品種類等字段上建立了索引則利用Select Into語句把數據復制到ERP系統的表中的時候只是復制了數據內容的本身而不會復制索引等信息

  三是這條語句使用具有局限性一般情況下這只能夠在SQL Server數據庫中采用不過對於SQL Server不同版本的數據庫或者還都是兼容的若需要導入的對象數據庫不是SQL Server的則需要采用其他的方法

  四是采用這條語句的話在目的表中必須不存在數據否則的話目的表中的數據會被清除也就是說這個語句不支持表與表數據的合並在SQL Server中有一條類似的語句可以實現這個功能這條語句就是Insert Into他的作用就是把另外一張表中的數據插入到當前表中若用戶想要的時表與表數據的合並則可以采用這條語句兩者不能夠混淆使用否則的話很容易導致數據的丟失

  五是以上兩條語句都支持兼容的不同類型的數據類型如在原標中某個字段的數據類型是整數型但是在目的表中這個字段的數據類型則是浮點型只要這個兩個數據類型本來就兼容的則在導入的時候數據庫是允許的

  第二種方法利用Excel等中間工具進行控制

  雖然第一種方法操作起來比較簡單但是其也有一些缺點如他只支持同一種類型的數據庫;不能夠對數據進行過多的干預等等一般情況下若用戶原數據准確度比較高不需要過多的修改就可以直接拿來用的話則筆者就已采用第一種方式

  但是若在原數據庫中數據的准確度不是很高又或者有很多數據是報廢的總之需要對原數據庫的數據進行整理才能夠使用的情況筆者不建議先導入進去再進行更改筆者在遇到這種情況時喜歡利用Excle作為中間工具也就是說先把數據中原數據庫中導到Excle中有些數據庫如Oracle數據庫他不支持Excle格式但是我們可以把它導為CSV格式的文件這種文件Excle也可以打得開

  然後再在Excle中對記錄進行修改由於Excle是一個很強的表格處理軟件所以其數據修改要比在數據庫中直接修改來得方便來得簡單如可以利用按時間排序等功能把一些長久不用的記錄清楚掉也可以利用替換等功能把一些不規范的字符更改掉這些原來在數據庫中比較復雜的任務在Excle等工具中都可以輕松的完成

  等到表中的內容修改無誤後數據庫管理員就可以把Excle表格中的文件直接導入到SQL Server數據庫中由於SQL Server與Excel是同一個父母生的所以他們之間的兼容性很好在Sql Server中提供了直接從Excel文件中導入數據的工具

  雖然這要借助中間工具導入數據但是因為其處理起來方便直觀所以筆者在大部分時候都是采用這種方式

  第三種方式使用數據轉換服務導入數據

  數據轉換服務是SQL Server數據庫中提供的一個非常強大的工具在SQLServer中數據轉換功能有一個圖形用戶接口用戶可以在圖形界面中導入數據並對數據進行相應的編輯

  另外數據轉換服務還支持COM組件的編程接口這也就是說在前台應用程序開發的時候可以直接調用數據轉換服務讓用戶通過前台應用系統而不用在後台數據庫系統進行任何的操作就可以把數據導入數據庫系統中去在前台對數據庫系統進行導入有一個明顯的好處就可以預先對數據的合法性進行檢查如可以利用VB等腳本語言對數據進行檢驗淨化和一定的轉換以符合目的數據庫的需要

  如在員工信息表中的婚姻狀況字段在Oracle數據庫系統中可能是用或者來表示婚姻狀況表示未婚表示已婚而在SQL Server數據庫中則利用Y或者N來表示婚姻狀況Y表示已婚N表示未婚在導入數據的時候若直接把Oracle數據庫表中的數據導入到SQL Server數據庫中因為婚姻狀況這個字段存儲的內容類型不同所以不能夠直接導遇到這種情況的話則就可以在導入數據之前先利用腳本語言對數據類型進行驗證若不符合要求的則可以通過腳本語言對數據進行一定的轉換轉換為N轉換為Y等等

  所以有時候程序員在開發前台應用程序的時候若要開發數據導入功能的話我們都是建議采用這個數據轉換服務不但有現成的接口而且還可以對數據進行驗證與一定程度的轉換另外數據轉換服務的數據導入效率非常的高即使通過前台程序調用其性能也比其他方法在同等條件下要高一個檔次而且隨著數據量的增加數據轉換服務的優勢會越來越明顯

  不過在前台應用程序調用數據轉換服務的時候需要注意數據轉換服務提供的COM接口比較復雜所以前台程序調用數據轉換服務的代碼也比較復雜若再加上一些腳本語言的話可能處理起來更加的繁瑣故一般只有在大型系統上才會用到這個接口若數據不多否則不需要復雜驗證與轉換的話利用這個接口是大刀小用得不償失

  第四種方式異構數據庫之間的導入導出

  雖然第二種第三種方式都可以完成異構數據庫之間數據的導入導出作業不過在SQL Server中還提供了另外一種解決方案即直接在SQL Server數據庫中連接到其他類型的數據庫上然後采用Select Into等語句實現數據的導入作業

  在SQL Server中提供了兩個函數可以幫助我們實現對非SQL Server數據庫的連接這兩個函數分別為Opendatesource與Openrowset他們的功能基本相同只是在細節上有所差異

  如Opendatesource這個函數至能夠打開源數據庫的表和視圖而不能夠對其進行過濾若用戶只想把源表中的部分數據導入到SQL Server數據庫的表中則不能對源表直接進行過濾過濾的動作需要在SQL Server數據庫中進行而Openrowset這個函數可以在打開對方數據庫的表或者視圖的時候直接利用Where等條件限制語句對記錄進新過濾為此在實際應用中還是Openrowset這個函數使用的頻率比較高

  不過由於其需要用戶寫復雜的參數而且又不能夠提供復雜的數據驗證功能所以在實際工作中用的並不是很多在一些小的應用系統中偶爾還可以見到其的蹤影在一些大的成熟的商業軟件中很少采用這種方式對數據進行導入

  有時候選擇多了用戶反而不知道如何下手筆者平時最喜歡采用的是第二種處理方式他比較直觀而且可以對數據進行成批的更改與整理但是其缺陷就是效率比較低特別是Excle軟件對於處理大量記錄的時候速度比較慢若這種方式行不通的話則筆者比較傾向於采用數據轉換的處理方式這個操作起來雖然比較復雜但是其可以提供比較復雜的驗證而且可以在圖形化的界面中對數據進行修改同時效率也比較高


From:http://tw.wingwit.com/Article/program/SQLServer/201311/22189.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.