代码如下,当使用文档1时没有错误发生,使用文档2时提示出错:
/*
Author: Jason
Email: hireats-bbs@yahoo.com.cn
CDT: 2008-02-25
UDT: 2008-02-25
==Note==
*/
/*
--dbo.sp_ATE_BI_bulkInsertData
--导入指定数据文件中的数据到指定表,操作成功时返回NULL,否则返回错误信息。
Parameters:
1.@para_tableName VARCHAR(100) $表名。
2.@para_filePath VARCHAR(300) $数据文件的路径。
*/
IFOBJECT_ID('sp_ATE_BI_bulkInsertData','P')ISNOTNULL
DROPPROCEDUREdbo.sp_ATE_BI_bulkInsertData;
GO
CREATEPROCEDUREdbo.sp_ATE_BI_bulkInsertData
@para_tableNameVARCHAR(100),
@para_filePathVARCHAR(300),
@para_errorMessageVARCHAR(MAX)OUTPUT
AS
DECLARE@cmdNVARCHAR(MAX);
SET@cmd=N'BULK INSERT @para_tableName
FROM ''@para_filePath''
WITH
(
DATAFILETYPE = ''char'',
FIELDTERMINATOR = '' '',
MAXERRORS = 0
);';
SET@cmd=REPLACE(@cmd,'@para_tableName',@para_tableName);
SET@cmd=REPLACE(@cmd,'@para_filePath',@para_filePath);
--action with trancation
BEGINTRANtran_sp_ATE_BI_bulkInsertData
BEGINTRY
EXECsp_executesql@cmd;
COMMITTRANtran_sp_ATE_BI_bulkInsertData;
ENDTRY
BEGINCATCH
BEGIN
ROLLBACKTRANtran_sp_ATE_BI_bulkInsertData;
PRINTN'Error occured<'+ERROR_MESSAGE()+ N'>, trancation
has been rollbacked!';
SET@para_errorMessage=ERROR_MESSAGE();
END
ENDCATCH
RETURN
GO
--单元测试:dbo.sp_ATE_BI_bulkInsertData
--
/*
......
*/
PRINTN'Start unit
test<dbo.sp_ATE_BI_bulkInsertData>:';
IFOBJECT_ID('TempDB..#tbl_tmp_bulkInsert','U')ISNOTNULL
DELETEFROM#tbl_tmp_bulkInsert;
ELSE
CREATETABLE#tbl_tmp_bulkInsert(
[ID]INTNOTNULL,
[name]VARCHAR(20)NOTNULL
);
GO
DECLARE@tableNameVARCHAR(100),@filePathVARCHAR(300),@errorMessageVARCHAR(MAX);
SET@tableName=N'#tbl_tmp_bulkInsert';
SET@filePath=N'E:\Temp\bulkInsertData.txt';
EXECdbo.sp_ATE_BI_bulkInsertData
@tableName,@filePath,@errorMessageOUTPUT;
PRINTN'Unit
test<dbo.sp_ATE_BI_bulkInsertData> complete!';
附:
文档1内容:
1
Area
2
Box
3
Hero
4
Triger
结果:
Start
unit test<dbo.sp_ATE_BI_bulkInsertData>:
(0行受影响)
(4行受影响)
Unit
test<dbo.sp_ATE_BI_bulkInsertData> complete!
文档2内容:
1
Area
2
Box
3A
Hero
4 Triger
结果:
Start
unit test<dbo.sp_ATE_BI_bulkInsertData>:
(4行受影响)
Error
occured<无法从链接服务器"(null)"的OLE DB访问接口"BULK"提取行。>, trancation has been rollbacked!
Unit
test<dbo.sp_ATE_BI_bulkInsertData> complete!