在我們工作中,經常需要將保存在文件中的數據導入到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 Se