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

简介:

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

 

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

 

BATCHSIZE  = batch_size

指定批处理中的行数。每个批处理作为一个事务复制到服务器。如果复制操作失败,则 SQL Server 将提交或回滚每个批处理的事务。默认情况下,指定数据文件中的所有数据为一个批处理。有关性能注意事项的信息,请参阅本主题后面的“备注”。 (http://msdn.microsoft.com/en-us/library/ms188365(v=sql.105).aspx

 

感觉上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的解释真让人迷惑啊。


本文转自 lzf328 51CTO博客,原文链接:

http://blog.51cto.com/lzf328/1021532

相关文章
|
2月前
|
Java
【Java】— —实现人物对象的增、删、改、查(注:对象的删除以逻辑删除为主,在person类中设置“删除状态字段”,字删除该字段时,将状态改为有效。)
【Java】— —实现人物对象的增、删、改、查(注:对象的删除以逻辑删除为主,在person类中设置“删除状态字段”,字删除该字段时,将状态改为有效。)
35 0
|
3月前
|
C++
MFC编程 -- 列表删除单行及多行操作
MFC编程 -- 列表删除单行及多行操作
13 1
|
存储
编写一个应用程序,在主类Test1类中,创建两个链表List<E>对象,分别存储通过键盘输入的字符串内容
编写一个应用程序,在主类Test1类中,创建两个链表List<E>对象,分别存储通过键盘输入的字符串内容
52 0
|
C++
C++中,类如果包含map/list等对象,慎用memset(0)
C++中,类如果包含map/list等对象,慎用memset(0)
65 0
|
SQL Python
【通用文件操作】查找重复文件
在前一篇我们以及说了如何搜索文件,详细查看【通用文件操作】文件搜索。今天我们来看看如何查找重复文件。在我们微信、QQ中,经常会我们每发送一次文件就会给我们在本地保存一份。我们可以使用今天的内容来实现重复文件的删除。
442 0
vbs的字典存入和读取操作 comparemode属性
vbs的字典存入和读取操作 comparemode属性
|
编译器 C++
C++要成对使用new和delete且采取相同形式
C++要成对使用new和delete且采取相同形式
145 0
|
Python
如何读取保存一些list信息的txt,生成有一组名字有规律的list
如何读取保存一些list信息的txt,生成有一组名字有规律的list
152 0
如何读取保存一些list信息的txt,生成有一组名字有规律的list
|
C语言
【C 语言】文件操作 ( remove 函数删除文件 | rename 函数重命名文件 | 代码示例 )
【C 语言】文件操作 ( remove 函数删除文件 | rename 函数重命名文件 | 代码示例 )
395 0
【C 语言】文件操作 ( remove 函数删除文件 | rename 函数重命名文件 | 代码示例 )