使用DTS導入多個文件數據到SQL Server中

使用DTS導入多個文件數據到SQL Server中

    在我們工作中,經常需要將保存在文件中的數據導入到SQL Serve的表中。有時可能需要同時從相同或不相同的文件目錄中導入多個文件的數據到SQL Server中。這裏我們將討論如何使用批處理文件和DTS從一個特定的文件目錄中,導入多個文件的數據到SQLServer中。

    試驗環境
  我們先創建整個試驗的環境。創建文件目錄“C:/MyImport”,和三個文件a.csv、b.csv和c.csv,文件內容如下。同時,在SQL Server中創建一個表用來存放導入的數據。
    C:/MyImport/a.csv
    1, MAK, A9411792711, 3400.25
    2, Claire, A9411452711, 24000.33
    3, Sam, A5611792711, 1200.34
    4, Wright, A5611792711, 1200.34
    5, Richard, G561d792755, 1223.34
    6, Valarie, B5611792788, 1240.32
    C:/MyImport/b.csv
    11, Rubon, 9671792711, 400.14
    22, Mike, 9418952711, 4000.56
    39, Hsu, 75611792511, 1230.00
    C:/MyImport/c.csv
    69, Lucy, 8411992710, 305.11
    45, Grace, 3413452713, 246.52
    33, Saint, 5461795716, 1278.70

    
    Create Database Bank
    Go
    Use Bank
    go
    Create table Account([ID] int, Name Varchar(100),
    AccountNo varchar(100), Balance money)
    Go
    Create table logtable (id int identity(1,1),
   Status varchar(500),
   Importeddate datetime default getdate())
    Go
    use master
    go
    sp_addlogin 'importuser','import','Bank'
    go
    use Bank
    go
    sp_adduser 'importuser'
    go
    sp_addrolemember 'db_datareader','importuser'
    go
    sp_addrolemember 'db_datawriter','importuser'
    go

  創鍵DTS
   1、在DTS中創建3個全局變量,FileName、ServerName和DatabaseName。
  
  
  2、創建Text File (Source) 和SQL Server連接,並創建數據轉換任務,如下圖所示。
  
  3、設置數據轉換的對應關係如下圖。
  

  4、創建動態屬性任務(dynamic tasks):連接InputFile中,設置Catalog的值爲全局變量DatabaseName,DataSource的值爲全局變量FileName;連接SQLServer中,設置DataSource的值爲全局變量ServerName。
  
   
  
  5、增加一個“成功時”的工作流在動態屬性任務和連接InputFile之間。
  
  6、如下圖那樣,創建一個執行SQL任務,來保存數據導入的記錄。
  SQL爲INSERT INTO LogTable (Status) VALUES (?)
  
  
  點擊參數,來設置參數,設置參數1爲全局變量FileName。
    
  
  7、增加一個“成功時”的工作流在連接SQLServer和執行SQL任務之間。
  
  8、將DTS包保存成結構化存儲文件。你也可以保存在SQL Server中,但我們這裏只討論保存成結構化存儲文件的方式。
  

  創建批處理文件
  如下所示創建批處理文件C:/MyImport/Import.bat。
    REM Type: Batch File
    REM Created by: Digjim
    REM Import all csv files to SQL Server using DTS
 
    REM Export DIR listing to C:/MyImport/Dirlist.txt
    dir c:/MyImport/*.csv /b > C:/MyImport/Dirlist.txt
 
    REM Execute DTS package for every file name in the Dirlist.txt

    for /f "tokens=1,2,3" %%i in (C:/MyImport/Dirlist.txt) do "C:/Program Files/Microsoft SQL Server/80/Tools/Binn/DTSrun.exe" -F "c:/myimport/myimportdts1.dts" -U importuser -P import –A "ServerName"="DIGJIM" -A "FileName"="c:/myimport/%%i" -A "DatabaseName"="Bank"

    REM Rename all the files with "old" as suffix
    ren c:/myimport/*.csv *.oldcsv

  執行批處理文件
   當批處理文件被執行以後,他會在C:/MyImport目錄下產生一個DirList.txt的文件,這個文件會包含所有C:/MyImport下擴展名爲CSV的文件,這些文件名會和其他必須的參數一氣傳輸給DTSrun.exe。在這個例子裏,DirList.txt的內容如下:
    C:/MyImport/DirList.txt
    acsv
    b.csv
    c.csv

   注意,在批處理文件中,根據你自己的情況設置ServerName,FileName和DatabaseName參數。
 
  結果
   現在你可以去你的數據庫看結果,
   批處理輸入的數據:

1<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 MAK

 A9411792711

3400.25

2

 Claire

 A9411452711

24000.33

3

 Sam

 A5611792711

1200.34

4

 Wright

 A5611792711

1200.34

5

 Richard

 G561d792755

1223.34

6

 Valarie

 B5611792788

1240.32

11

 Rubon

9671792711

400.14

22

 Mike

9418952711

4000.56

39

 Hsu

75611792511

1230

69

 Lucy

8411992710

305.11

45

 Grace

3413452713

246.52

33

 Saint

5461795716

1278.7

     在logtable中記錄的Log。

1

c:/myimport/a.csv

2004-4-19 1:16

2

c:/myimport/b.csv

2004-4-19 1:16

3

c:/myimport/c.csv

2004-4-19 1:16

如果你把DTS包存儲在SQL Server中,批處理文件就這樣寫
     REM Type: Batch File
     REM Created by: Digjim
     REM Import all csv files to SQL Server using DTS
 
     REM Export DIR listing to C:/MyImport/Dirlist.txt
     dir c:/MyImport/*.csv /b > C:/MyImport/Dirlist.txt
 
     REM Execute DTS package for every file name in the Dirlist.txt

     for /f "tokens=1,2,3" %%i in (C:/MyImport/Dirlist.txt) do "C:/Program Files/Microsoft SQL Server/80/Tools/Binn/DTSrun.exe" –S "SQL" –N "myimportdts" -U importuser -P import –A "ServerName"="DIGJIM" -A "FileName"="c:/myimport/%%i" -A "DatabaseName"="Bank" 

     REM Rename all the files with "old" as suffix
     ren c:/myimport/*.csv *.oldcsv

 

參考:

使用T-SQL導入多個文件數據到SQL Server中
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章