BULK INSERT 操作文件是不是被当做一个Transcation?
2012-10-11 20:03
281 查看
早上看到网上有人问将文件导入数据库的问题,其实可以用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的解释真让人迷惑啊。
以前一直认为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的解释真让人迷惑啊。
相关文章推荐
- BULK INSERT 操作文件是不是被当做一个Transcation?
- android 工具类:用来判断一个文件是不是图片,通过文件名
- 安装sql提示,以前的某一个程序安装已在安装计算机上创建挂起的文件操作。
- 一个比较好的文件操作的例子
- 一个文件操作的工具类,包括了常用的操作
- Linux下多个进程或线程同时对一个文件进行写操作
- C#打开一个文件的操作详解
- Access数据库:它已经被别的用户以独占方式打开,操作必须使用一个可更新的查询,不能锁定文件
- C#文件操作源码 递归复制一个目录 递归删除文件 和 文件夹
- Python3 文件操作的一个例子2
- oc 文件管理NSFileManager,文件读写NSFileHandle ,设计一个文件管理类将一个文件复制到另一个文件,由于文件过大要求每次复制100长度,通过NSFileHandle 来操作,并
- 判断一个文件是不是excel格式的
- win7:该文件没有与之关联的程序来执行该操作。请安装一个程序,或者,如果已安装程序,请在“默认程序”控
- unity3d发布一个Android的apk文件需要具备什么环境及具体操作步骤
- adb 操作重复性太强,我要写一个批处理文件(*.bat)
- 一个朋友要的操作稀疏文件源代码
- HDFS的API调用,创建Maven工程,创建一个非Maven工程,HDFS客户端操作数据代码示例,文件方式操作和流式操作
- 文件操作,合并两个二进制文件为单独一个二进制文件
- Delphi中判断一个文件是不是JPG图片文件
- 如何查看一个进程打开哪些fd及对应的文件或套接字操作