日期:2014-05-16 浏览次数:20813 次
早上看到网上有人问将文件导入数据库的问题,其实可以用BCP或者BULK INSERT处理,这样性能很好。后来牵扯到了错误处理的问题,如果用BULK INSERT,是不是需要显示的Transcation(begin tran).
以前一直认为BULK INSERT是将每条语句当做Transcation处理的,如果100条记录,一条失败99条成功,那么你的数据库将会产生99条数据。但是在MSDN上看到了其中一个参数的解释:
指定批处理中的行数。每个批处理作为一个事务复制到服务器。如果复制操作失败,则 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
错误如下: