SQL Server批量插入是否是事务性的?

Bri*_*ian 16 sql-server transactions bulkinsert

如果我在SQL Server 2000查询分析器中运行以下查询:

BULK INSERT  OurTable 
FROM 'c:\OurTable.txt' 
WITH (CODEPAGE = 'RAW', DATAFILETYPE = 'char', FIELDTERMINATOR = '\t', ROWS_PER_BATCH = 10000, TABLOCK)
Run Code Online (Sandbox Code Playgroud)

在符合OurTable架构40行的文本文件上,但随后更改最后20行的格式(假设最后20行的字段较少),我收到错误.但是,前40行都致力于表格.有什么关于我调用Bulk Insert的方式使它不是事务性的,或者我是否需要做一些明确的事情来强制它在失败时回滚?

Jos*_*sef 21

BULK INSERT充当一系列单独的INSERT语句,因此,如果作业失败,它不会回滚所有已提交的插入.

但是,它可以放在一个事务中,所以你可以做这样的事情:

BEGIN TRANSACTION
BEGIN TRY
BULK INSERT  OurTable 
FROM 'c:\OurTable.txt' 
WITH (CODEPAGE = 'RAW', DATAFILETYPE = 'char', FIELDTERMINATOR = '\t', 
   ROWS_PER_BATCH = 10000, TABLOCK)
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
END CATCH
Run Code Online (Sandbox Code Playgroud)

  • 如果要插入大量行,请注意事务日志被填满等. (2认同)