sql-server - SQL Server 批量插入是事务性的吗?

标签 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)

在符合 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/

相关文章:

sql-server - SQL Server,插入一行锁定整个表

sql-server - SQLServer 的 Tomcat JDBC 领域登录问题

sql - 从表到表批量插入

entity-framework - Entity Framework 和表值参数

sql-server - 如何为已更改名称的 SQL Server 创建别名

sql - 我在转换/转换 GetDate()[3] 的 dw 日期部分时遇到问题,以便我可以在字符串 [1,3,5] 中找到它

transactions - 交易同步注册问题

c# - mysql 中的事务

PHP PayPal Sandbox在交易后无法获得值(value)

sql - 带有两个行终止符的 BULK INSERT