sql, import from txt
FileType=1 (TxtFile1.txt)
"Kelly","Reynold","kelly@reynold.com" "John","Smith","bill@smith.com" "Sara","Parker","sara@parker.com"
FileType=2 (TxtFile2.txt)
Kelly,Reynold,kelly@reynold.com John,Smith,bill@smith.com Sara,Parker,sara@parker.com
BULK INSERT
I decided to use BULK INSERT to implement the solution. The BULK INSERT statement was introduced in SQL Server 7 and allows you to interact with bcp (bulk copy program) via a script. In pre-7 versions the only way you could access bcp functionality was from a command prompt. I am not going to list the full syntax of BULK INSERT here (but you can find it here), because it is a little long and most of it does not apply to the problem I am solving. Instead, I will show the valid BULK INSERT statements used to load the data shown above.
BULK INSERT TmpStList FROM 'c:\TxtFile1.txt' WITH (FIELDTERMINATOR = '","')
TmpStList is the target table and TxtFile1.txt is the source data file. The source file is located in the root of the C drive. The FIELDTERMINATOR argument allows you to specify the delimeter used to discern column values.
The valid statement for FileType=2 is shown here:
BULK INSERT tmpStList FROM 'c:\TxtFile2.txt' WITH (FIELDTERMINATOR = ',')
The only difference is the value of the FIELDTERMINATOR argument.
The procedure used to implement the data loading is shown here.
SET QUOTED_IDENTIFIER OFF go CREATE PROCEDURE ps_StudentList_Import @PathFileName varchar(100), @OrderID integer, @FileType tinyint AS --Step 1: Build Valid BULK INSERT Statement DECLARE @SQL varchar(2000) IF @FileType = 1 BEGIN -- Valid format: "John","Smith","john@smith.com" SET @SQL = "BULK INSERT TmpStList FROM '"+@PathFileName+"' WITH (FIELDTERMINATOR = '"",""') " END ELSE BEGIN -- Valid format: John,Smith,john@smith.com SET @SQL = "BULK INSERT TmpStList FROM '"+@PathFileName+"' WITH (FIELDTERMINATOR = ',') " END --Step 2: Execute BULK INSERT statement EXEC (@SQL) --Step 3: INSERT data into final table INSERT StudentList (StFName,StLName,StEmail,OrderID) SELECT CASE WHEN @FileType = 1 THEN SUBSTRING(StFName,2,DATALENGTH(StFName)-1) ELSE StFName END, SUBSTRING(StLName,1,DATALENGTH(StLName)-0), CASE WHEN @FileType = 1 THEN SUBSTRING(StEmail,1,DATALENGTH(StEmail)-1) ELSE StEmail END, @OrderID FROM tmpStList --Step 4: Empty temporary table TRUNCATE TABLE TmpStList go The following shows the way to call the procedure specifying a different FileType value for each call.EXEC ps_StudentList_Import 'c:\TxtFile1.txt',1, 1 EXEC ps_StudentList_Import 'c:\TxtFile2.txt',1, 2
rianto utomo bole nyontek dari http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file
Tinggalkan komentar