读书人

BULK INSERT 操作资料是不是被当做一个

发布时间: 2012-09-24 13:49:41 作者: rapoo

BULK INSERT 操作文件是不是被当做一个Transcation?

早上看到网上有人问将文件导入数据库的问题,其实可以用BCP或者BULK INSERT处理,这样性能很好。后来牵扯到了错误处理的问题,如果用BULK INSERT,是不是需要显示的Transcation(begin tran).

以前一直认为BULK INSERT是将每条语句当做Transcation处理的,如果100条记录,一条失败99条成功,那么你的数据库将会产生99条数据。但是在MSDN上看到了其中一个参数的解释:

BATCHSIZE =感觉上BULK INSERT将处理一个文件的过程当做一个Transcation.然后做了下面的测试,将TXT的数据导入到一张表:

TXT数据保存在D盘test.txt:

"John","Smith","bill@smith.com"
"Sara","Parker","sara@parker.com"
"Kelly","Reynold","kelly@reynold.com"

---create atable:

CREATETABLE [dbo].[Person](

[FirstNmae] [varchar](50)NULL,

[LastName] [varchar](50)NULL,

[EmailAddress] [varchar](16)NULL

)ON [PRIMARY]

---use bulkinsert deal with data:

BULKINSERT PersonFROM'D:\test.txt'WITH(FIELDTERMINATOR='","')

BULKINSERT PersonFROM'D:\test.txt'WITH(FIELDTERMINATOR='","',BATCHSIZE=10000)--将条数据当做一个BATCH

错误如下:

Msg 4863, Level 16,State 1, Line 2

Bulk load data conversion error (truncation)for row 3, column 3 (EmailAddress).

两条数据成功一条数据失败,证明BULKINSERT是将每条数据当做一个Transcation处理的,所以我们需要显示的使用事务,使用TRY CATCH捕获错误进行Rollback。

MSDN的解释真让人迷惑啊。

读书人网 >其他数据库

热点推荐