教你在SQLServer數(shù)據(jù)庫中導(dǎo)入導(dǎo)出數(shù)據(jù)._第1頁
教你在SQLServer數(shù)據(jù)庫中導(dǎo)入導(dǎo)出數(shù)據(jù)._第2頁
教你在SQLServer數(shù)據(jù)庫中導(dǎo)入導(dǎo)出數(shù)據(jù)._第3頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、教你在 SQL Server 數(shù)據(jù)庫中導(dǎo)入導(dǎo)出數(shù)據(jù) 在我們建立一個數(shù)據(jù)庫時,并且想將分散在各處的不同類型的數(shù)據(jù)庫分類匯總在這個 新建的數(shù)據(jù)庫中時,尤其是在進(jìn)行數(shù)據(jù)檢驗、凈化和轉(zhuǎn)換時,將會面臨很大的挑戰(zhàn)。 幸好 SQL Server 為我們提供了強大、豐富的數(shù)據(jù)導(dǎo)入導(dǎo)出功能,并且在導(dǎo)入導(dǎo)出的同 時可以對數(shù)據(jù)進(jìn)行靈活的處理。在 SQL Server 中主要有三種方式導(dǎo)入導(dǎo)出數(shù)據(jù):使用Transact-SQL 對數(shù)據(jù)進(jìn)行處理;調(diào)用命令行工具 BCP 處理數(shù)據(jù);使用數(shù)據(jù)轉(zhuǎn)換服務(wù) (DTS) 對數(shù)據(jù)進(jìn)行處理。這三種方 法各有其特點,下面就它們的主要特點進(jìn)行比較。一、使用方式的比較1. 使用 Transa

2、ct-SQL 進(jìn)行數(shù)據(jù)導(dǎo)入導(dǎo)出我們很容易看出, Transact-SQL 方法就是通過 SQL 語句方式將相同或不同類型的數(shù)據(jù) 庫中的數(shù)據(jù)互相導(dǎo)入導(dǎo)出或者匯集在一處的方法。如果是在不同的 SQL Server 數(shù)據(jù)庫 之間進(jìn)行數(shù)據(jù)導(dǎo)入導(dǎo)出,那將是非常容易做到的。一般可使用 SELECT INTO FROM 和 INSERT INTO 。使用 SELECT INTO FROM 時 INTO 后跟的表必須存在,也就是說 它的功能是在導(dǎo)數(shù)據(jù)之前先建立一個空表,然后再將源表中的數(shù)據(jù)導(dǎo)入到新建的空表 中,這就相當(dāng)于表的復(fù)制(并不會復(fù)制表的索引等信息) 。而 INSERT INTO 的功能是 將源數(shù)據(jù)插入

3、到已經(jīng)存在的表中,可以使用它進(jìn)行數(shù)據(jù)合并,如果要更新已經(jīng)存在的 記錄,可以使用 UPDATE 。SELECT * INTO table2 FROM table1-table1 和 table2 的表結(jié)構(gòu)相同INSERT INTO table2 SELECT * FROM table3-table2 和 table3 的表結(jié)構(gòu)相同當(dāng)在異構(gòu)數(shù)據(jù)庫之間的進(jìn)行數(shù)據(jù)導(dǎo)入導(dǎo)出時,情況會變得復(fù)雜得多。首先要解決的是 如何打開非 SQL Server 數(shù)據(jù)庫的問題。在 SQL Server 中提供了兩個函數(shù)可以根據(jù)各種類型數(shù)據(jù)庫的OLE DB Provider 打開并操作這些數(shù)據(jù)庫, 這兩個函數(shù)是 OPEND

4、A TASOURCE 和 OPENROWSET 。它們的功能 基本上相同,不同之處主要有兩點。(1) 調(diào)用方式不同。OPENDATASOURCE 的參數(shù)有兩個,分別是 OLE DB Provider 和連接字符串。使用 OPENDATASOURCE 只相當(dāng)于引用數(shù)據(jù)庫或者是服務(wù)(對于SQL Server、Oracle 等數(shù)據(jù)庫來說)。要想引用其中的數(shù)據(jù)表或視圖,必須在OPENDATASOURCE(.) 后進(jìn)行引用。在 SQL Server 中通過 OPENDA TASOURCE 查詢 Access 數(shù)據(jù)庫 abc.mdb 中的 table1 表SELECT * FROM OPENDA TASO

5、URCE('Microsoft.Jet.OLEDB.4.0', 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=abc.mdb;Persist Security Info=False').table1OPENROWSET 相當(dāng)于一個記錄集,可以將直接當(dāng)成一個表或視圖使用。在 SQL Server 中通過 OPENROWSETE 查詢 Access 數(shù)據(jù)庫 abc.mdb 中的 table1 表SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', '

6、;abc.mdb' 'admin''','SELECT * FROM table1')(2) 靈活度不同。OPENDATASOURCE 只能打開相應(yīng)數(shù)據(jù)庫中的表或視圖, 如果需要過濾的話, 只能在 SQL Server 中進(jìn)行處理。而 OPENROWSET 可以在打開數(shù)據(jù)庫的同時對其進(jìn)行過濾, 如上面的例子,在 OPENROWSET 中可以使用 SELECT * FROM table1 對 abc.mdb 中 的數(shù)據(jù)表進(jìn)行查詢,而 OPENDATASOURCE 只能引用 table1,而無法查詢 table1。因 此, OPENROWSE

7、T 比較 OPENDATASOURCE 更加靈活。2. 使用命令行 BCP 導(dǎo)入導(dǎo)出數(shù)據(jù)很多大型的系統(tǒng)不僅僅提供了友好的圖形用戶接口,同時也提供了命令行方式對系統(tǒng) 進(jìn)行控制。在SQL Server 中除了可以使用 SQL語句對數(shù)據(jù)進(jìn)行操作外, 還可以使用一 個命令行工具 BCP 對數(shù)據(jù)進(jìn)行同樣的操作。 BCP 是基于 DB-Library 客戶端庫的工具。 它的功能十分強大, BCP 能夠以并行方式將數(shù)據(jù)從多個客戶端大容量復(fù)制到單個表中, 從而大大提高了裝載效率。但在執(zhí)行并行操作時要注意的是只有使用基于 ODBC 或 SQL OLE DB 的 API 的應(yīng)用程序才可以執(zhí)行將數(shù)據(jù)并行裝載到單個表

8、中的操作。BCP 可以將 SQL Server 中的數(shù)據(jù)導(dǎo)出到任何 OLE DB 所支持的數(shù)據(jù)庫的, 如下面的語 句是將 authors 表導(dǎo)出到 excel 文件中。bcp pubs.dbo.authors out c:temp1.xls-c -q -S"GNETDATA/GNETDA TA" -U"sa" -P"password"BCP 不僅能夠通過命令行執(zhí)行, 同時也可以通過 SQL 執(zhí)行, 這需要一個系統(tǒng)存儲過程 xp_cmdshell 來實現(xiàn),如上面的命令可改寫為如下形式。EXEC master.xp_cmdshell &#

9、39;bcp pubs.dbo.authors out c:temp1.xls -c -q -S"GNETDA TA/GNETDA TA" -U"sa" -P"password"'3. 使用數(shù)據(jù)轉(zhuǎn)換服務(wù) (DTS) 導(dǎo)入導(dǎo)出數(shù)據(jù)DTS 是 SQL Server 中導(dǎo)入導(dǎo)出數(shù)據(jù)的核心,它除有具有 SQL 和命令行工具 BCP 相應(yīng) 的功能外,還可以靈活地通過 VBScript 、 JScript 等腳本語言對數(shù)據(jù)進(jìn)行檢驗、凈化和 轉(zhuǎn)換。SQL Server為DTS 提供了圖形用戶接口,用戶可以使用圖形界面導(dǎo)入導(dǎo)出數(shù)據(jù),并對 數(shù)據(jù)

10、進(jìn)行相應(yīng)的處理。同時, DTS 還以 com 組件的形式提供編程接口,也就是說任何 支持 com 組件的開發(fā)工具都可以利用 com 組件使用 DTS 所提供的功能。 DTS 在 SQL Server 中可以保存為不同的形式, 可以是包的形式, 也可以保存成 Visual Basic 源程序 文件,這樣只要在 VB 中編譯便可以使用 DTS com 組件了。DTS 和其它數(shù)據(jù)導(dǎo)入導(dǎo)出方式最大的不同就是它可以在處理數(shù)據(jù)的過程中對每一行數(shù) 據(jù)進(jìn)行深度處理。以下是一段 VBScript 代碼,這段代碼在處 DTS 理每一條記錄時執(zhí) 行, DTSDestination 表示目標(biāo)記錄, DTSSource

11、 表示源記錄,在處理“婚姻狀況”時, 將源記錄中的“婚姻狀況”中的 0或 1 轉(zhuǎn)換成目標(biāo)記錄中“已婚”或“未婚” 。Function Main()DTSDestination(" 姓名 ") = DTSSource(" 姓名 ") DTSDestination(" 年齡 ") = DTSSource(" 年齡 ") If DTSDestination(" 婚姻狀況 ") = 1 ThenDTSDestination(" 婚姻狀況 ") = " 已婚 "El

12、seDTSDestination(" 婚姻狀況 ") = " 未婚 "End IfMain = DTSTransformStat_OKEnd Function1 如示。上述的三種數(shù)據(jù)導(dǎo)入導(dǎo)出方法各有其利弊,它們之間的相互比較如圖<>B 二、性能的比較 使用 Transact-SQL 方式。如果是 SQL Server 數(shù)據(jù)庫之間的導(dǎo)入導(dǎo)出,速度將非常快, 但是使用 OPENDATASOURCE 和 OPENROWSET 方法利用 OLE DB Provider 打開并 操作數(shù)據(jù)庫時速度會慢一些。使用 BCP 命令方式。如果不需要對數(shù)據(jù)進(jìn)行驗證

13、等操作的話,使用它還是非常快的, 這是因為它的內(nèi)部使用 c 接口的 DB-library ,所以在操作數(shù)據(jù)庫時速度有很大的提升。使用 DTS 方式導(dǎo)數(shù)據(jù)應(yīng)該是最好的方式了。由于它整合了 Microsoft Universal Data Access 技術(shù)與 Microsoft ActiveX 技術(shù),因此不僅可以靈活地處理數(shù)據(jù),而且在數(shù)據(jù)導(dǎo) 入導(dǎo)出的效率是非常高的。總結(jié)SQL Server 提供了豐富的數(shù)據(jù)導(dǎo)入導(dǎo)出方法,這給我們提供了更多的選擇,但是這又 會給我們帶來一個新問題:如何根據(jù)具體情況選擇合適的數(shù)據(jù)導(dǎo)入導(dǎo)出方法呢?我在 這里提供一些個人的建議,希望能對讀者起到一定的指導(dǎo)作用。如果是在 SQL Server 數(shù)據(jù)庫之間進(jìn)行數(shù)據(jù)導(dǎo)入導(dǎo)出時,并且不需要對數(shù)據(jù)進(jìn)行復(fù)雜的 檢驗,最好使用 Transact-SQL 方法進(jìn)行處理,因為在 SQL Server 數(shù)據(jù)庫之間進(jìn)行數(shù)據(jù) 操作時 ,SQL 是非??斓摹?當(dāng)然, 如果要進(jìn)行復(fù)雜的操作, 如數(shù)據(jù)檢驗、 轉(zhuǎn)換等操作時, 最好還是使用 DTS 進(jìn)行處理,因為 DTS 不光導(dǎo)數(shù)據(jù)效率高,而且能夠?qū)?shù)據(jù)進(jìn)行深 度控制。 但是 DTS 的編程接口是基于 com 的,并且這個接口十分復(fù)雜,因此,使用程 序調(diào)用 DTS 將變也會變得很復(fù)雜,因此 , 當(dāng)數(shù)據(jù)量不是很大,并且想將數(shù)據(jù)導(dǎo)入導(dǎo)出 功能加入到程序中, 而且沒有復(fù)雜的數(shù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論