如果我在 SQL Server 2000 查询分析器中运行以下查询:
BULK INSERT OurTable
FROM 'c:\OurTable.txt'
WITH (CODEPAGE = 'RAW', DATAFILETYPE = 'char', FIELDTERMINATOR = '\t', ROWS_PER_BATCH = 10000, TABLOCK)
在符合 OurTable 的 40 行架构的文本文件上,但随后更改了最后 20 行的格式(假设最后 20 行的字段较少),我收到错误。但是,前 40 行已提交到表中。我调用批量插入的方式是否有一些使其不是事务性的,或者我是否需要做一些明确的事情来强制它在失败时回滚?
最佳答案
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
关于sql-server - SQL Server 批量插入是事务性的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41869/