在軟體項目實施的時候,資料匯入一直是項目人員比較頭疼的問題。其實,在SQL Server中整合了很多成批匯入資料的方法。有些項目實施顧問頭疼的問題,在我們資料庫管理員眼中,是小菜一碟。現在的重點就是,如何讓使用者瞭解這些方法,讓資料匯入變得輕鬆一些。相信以下方法大家都用過了,溫故而知新哈,如果有更好的方法希望大家都提出來~
一、使用Select Into語句
若企業資料庫都採用的是SQL Server資料庫的話,則可以利用Select Into語句來實現資料的匯入。Select Into語句,他的作用就是把資料從另外一個資料庫中查詢出來,然後加入到某個使用者指定的表中。
在使用這條語句的時候,需要注意幾個方面的內容。
1、需要在目的資料庫中先建立相關的表。如想把進銷存系統資料庫(SQLServer)中的產品資訊表(Product)匯入到ERP系統中的產品資訊表(M_Product)中。則前期是在ERP系統的資料庫中已經建立了這張產品資訊表。
2、這種方法只複製表中的資料,而不複製表中的索引。如在進銷存系統資料中的產品資訊表中,在產品編號、產品種類等欄位上建立了索引。則利用Select Into語句把資料複製到ERP系統的表中的時候,只是複製了資料內容的本身,而不會複製索引等資訊。
3、這條語句使用具有局限性。一般情況下,這隻能夠在SQL Server資料庫中採用。不過,對於SQL Server不同版本的資料庫,如2008或者2003,還都是相容的。若需要匯入的對象資料庫不是SQL Server的,則需要採用其他的方法。
4、採用這條語句的話,在目的表中必須不存在資料。否則的話,目的表中的資料會被清除。也就是說,這個語句不支援表與表資料的合并。在SQL Server中,有一條類似的語句,可以實現這個功能。這條語句就是:Insert Into。他的作用就是把另外一張表中的資料插入到當前表中。若使用者想要的時表與表資料的合并,則可以採用這條語句。兩者不能夠混淆使用,否則的話,很容 易導致資料的丟失。
5、以上兩條語句都支援相容的不同類型的資料類型。如在原標中,某個欄位的資料類型是整數型,但是在目的表中這個欄位的資料類型則是浮點型,只要這個兩個資料類型本來就相容的,則在匯入的時候,資料庫是允許的。
另外再補上一個小技巧:
我們想複製表a的所有欄位名到一個新表b的時候,可以使用以下方法:
1)select * into b from a where 1<>1 (僅SQL Server可用)
2)select top 0 * into b from a
二、利用Excel等中間工具進行控制
雖然第一種方法操作起來比較簡單,但是其也有一些缺點。如他只支援同一種類型的資料庫;不能夠對資料進行過多的幹預等等。一般情況下,若使用者原資料準確度比較高,不需要過多的修改就可以直接拿來用的話,則筆者就已採用第一種方式。
但是,若在原資料庫中,資料的準確度不是很高,又或者,有很多資料是報廢的。總之,需要對原資料庫的資料進行整理,才能夠使用的情況,我不建議先匯入進去,再變更。我在遇到這種情況時,喜歡利用Excle作為中間工具。也就是說,先把資料中原資料庫中導到Excle中。有些資料庫,如 Oracle資料庫,他不支援Excle格式。但是,我們可以把它導為CSV格式的檔案。這種檔案Excle也可以打得開。
然後,再在Excle中,對記錄進行修改。由於Excle是一個很強的表格處理軟體,所以,其資料修改,要比在資料庫中直接修改來得方便,來得簡 單。如可以利用按時間排序等功能,把一些長久不用的記錄清楚掉。也可以利用替換等功能,把一些不規範的字元更改掉。這些原來在資料庫中比較複雜的任務,在 Excle等工具中都可以輕鬆的完成。
等到表中的內容修改無誤後,資料庫管理員就可以把Excle表格中的檔案直接匯入到SQL Server資料庫中。由於SQL Server與Excel是同一個父母生的,所以,他們之間的相容性很好。在Sql Server中提供了直接從Excel檔案中匯入資料的工具。
雖然這要藉助中間工具匯入資料,但是,因為其處理起來方便、直觀,所以,我在大部分時候都是採用這種方式。最後,再附上如何讓Excel表格在資料庫中能查看到的相關代碼:
exec sp_addlinkedserver 'excel','ex','Microsoft.Jet.OLEDB.4.0','C:\Documents and Settings\Administrator\案頭\abc.xls',null,'Excel 5.0' --建立一個名為excel的串連服務,可以查看到abc.xls裡面的內容
EXEC sp_addlinkedsrvlogin 'excel', 'false', 'sa', 'Admin', NULL --建立一個映射以允許 SQL Server 登入 sa 使用 Excel 登入 Admin 串連到 excel,並且沒有密碼
--exec sp_dropserver 'excel' --刪除串連
select * from excel...Sheet1$ --查看Excel的Sheet1表裡面的內容
小提示:Excel表格裡面的資料,必須先去除空格,不然有可能由於空格的原因,導致資料的不一致。Excel表格的命名,要設定為abc.xls,並且放在案頭上。開啟指定的Excel表格的時候,不能在資料庫中查看其資料,不然資料庫會報錯。