菜鳥學堂: 
使用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
 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中