开发者社区> 科技小能手> 正文

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
编写一个应用程序,在主类Test1类中,创建两个链表List<E>对象,分别存储通过键盘输入的字符串内容
编写一个应用程序,在主类Test1类中,创建两个链表List<E>对象,分别存储通过键盘输入的字符串内容
7 0
C++中,类如果包含map/list等对象,慎用memset(0)
C++中,类如果包含map/list等对象,慎用memset(0)
12 0
【Lua基础 第4章】Lua的流程控制、#的作用、table的创建方式、table表常用方法、函数、多返回值、可变长参数
Lua的流程控制、#的作用、table的创建方式、table表常用方法、函数、多返回值、可变长参数
28 0
Shell数组变量定义-获取-拼接-删除
Shell数组变量定义-获取-拼接-删除
51 0
C++要成对使用new和delete且采取相同形式
C++要成对使用new和delete且采取相同形式
77 0
如何读取保存一些list信息的txt,生成有一组名字有规律的list
如何读取保存一些list信息的txt,生成有一组名字有规律的list
66 0
【C 语言】文件操作 ( 配置文件读写 | 读取配置文件 | 函数接口形参 | 读取配置文件的逐行遍历操作 | 读取一行文本 | 查找字符 | 删除字符串前后空格 )
【C 语言】文件操作 ( 配置文件读写 | 读取配置文件 | 函数接口形参 | 读取配置文件的逐行遍历操作 | 读取一行文本 | 查找字符 | 删除字符串前后空格 )
54 0
【C 语言】文件操作 ( remove 函数删除文件 | rename 函数重命名文件 | 代码示例 )
【C 语言】文件操作 ( remove 函数删除文件 | rename 函数重命名文件 | 代码示例 )
219 0
读取文件内容: 1.通过open函数获取文件对象 2.执行read函数 需要指定读取的字符
读取文件内容: 1.通过open函数获取文件对象 2.执行read函数 需要指定读取的字符
42 0
+关注
科技小能手
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载