[日期:2005-07-08]來(lái)源:CSDN 作者:[字體:
大中小]
使用DTS導(dǎo)入多個(gè)文件數(shù)據(jù)到SQL Server中
在我們工作中,經(jīng)常需要將保存在文件中的數(shù)據(jù)導(dǎo)入到SQL Serve的表中。有時(shí)可能需要同時(shí)從相同或不相同的文件目錄中導(dǎo)入多個(gè)文件的數(shù)據(jù)到SQL Server中。這里我們將討論如何使用批處理文件和DTS從一個(gè)特定的文件目錄中,導(dǎo)入多個(gè)文件的數(shù)據(jù)到SQLServer中。
試驗(yàn)環(huán)境
我們先創(chuàng)建整個(gè)試驗(yàn)的環(huán)境。創(chuàng)建文件目錄“C:\MyImport”,和三個(gè)文件a.csv、b.csv和c.csv,文件內(nèi)容如下。同時(shí),在SQL Server中創(chuàng)建一個(gè)表用來(lái)存放導(dǎo)入的數(shù)據(jù)。
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
創(chuàng)鍵DTS
1、在DTS中創(chuàng)建3個(gè)全局變量,F(xiàn)ileName、ServerName和DatabaseName。
2、創(chuàng)建Text File (Source) 和SQL Server連接,并創(chuàng)建數(shù)據(jù)轉(zhuǎn)換任務(wù),如下圖所示。
3、設(shè)置數(shù)據(jù)轉(zhuǎn)換的對(duì)應(yīng)關(guān)系如下圖。
4、創(chuàng)建動(dòng)態(tài)屬性任務(wù)(dynamic tasks):連接InputFile中,設(shè)置Catalog的值為全局變量DatabaseName,DataSource的值為全局變量FileName;連接SQLServer中,設(shè)置DataSource的值為全局變量ServerName。
5、增加一個(gè)“成功時(shí)”的工作流在動(dòng)態(tài)屬性任務(wù)和連接InputFile之間。
6、如下圖那樣,創(chuàng)建一個(gè)執(zhí)行SQL任務(wù),來(lái)保存數(shù)據(jù)導(dǎo)入的記錄。
SQL為INSERT INTO LogTable (Status) VALUES (?)
點(diǎn)擊參數(shù),來(lái)設(shè)置參數(shù),設(shè)置參數(shù)1為全局變量FileName。
7、增加一個(gè)“成功時(shí)”的工作流在連接SQLServer和執(zhí)行SQL任務(wù)之間。
8、將DTS包保存成結(jié)構(gòu)化存儲(chǔ)文件。你也可以保存在SQL Server中,但我們這里只討論保存成結(jié)構(gòu)化存儲(chǔ)文件的方式。
創(chuàng)建批處理文件
如下所示創(chuàng)建批處理文件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
執(zhí)行批處理文件
當(dāng)批處理文件被執(zhí)行以后,他會(huì)在C:\MyImport目錄下產(chǎn)生一個(gè)DirList.txt的文件,這個(gè)文件會(huì)包含所有C:\MyImport下擴(kuò)展名為CSV的文件,這些文件名會(huì)和其他必須的參數(shù)一氣傳輸給DTSrun.exe。在這個(gè)例子里,DirList.txt的內(nèi)容如下:
C:\MyImport\DirList.txt
acsv
b.csv
c.csv
注意,在批處理文件中,根據(jù)你自己的情況設(shè)置ServerName,F(xiàn)ileName和DatabaseName參數(shù)。
結(jié)果
現(xiàn)在你可以去你的數(shù)據(jù)庫(kù)看結(jié)果,
批處理輸入的數(shù)據(jù):
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包存儲(chǔ)在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導(dǎo)入多個(gè)文件數(shù)據(jù)到SQL Server中