TSQL:事务如何与插入表一起使用?

时间:2013-12-06 19:17:03

标签: sql-server tsql transactions

假设我有以下声明

INSERT INTO myTable
(colums)
VALUES (values)

如果出于某种原因,其中一个操作失败了怎么办?一切都将被停止,所有成功的插入将被回滚吗?

如果出现问题,我只希望插入失败。但所有其余的前后都要继续前进。

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

如果在同一个区块中,则会回滚所有内容。

但是如果您正在使用存储过程并且内部有EXEC myStoredProcedure,那么如果您想在内部SP拥有自己的逻辑时需要计算Transact的级别

BeginTransaction/commit

@@TRANCOUNT (Transact-SQL)

http://msdn.microsoft.com/en-us/library/ms187967.aspx

您可以使用

TRY...CATCH (Transact-SQL)

http://technet.microsoft.com/en-us/library/ms175976.aspx

的Valentin

www.bluelabs.ca

答案 1 :(得分:0)

如果这是您唯一的声明,那么它将在隐式事务的上下文中执行。如果该操作失败,那么事务(在这种情况下 - 这一个INSERT语句)将回滚,并且数据库看起来好像这个语句从未发生过。

如果您需要针对一系列10个INSERT语句执行此操作,则必须使用显式事务(使用BEGIN TRANSACTION命令启动它,{ {1}}在所有内容成功时提交更改,或在出现问题时COMMIT提交更改,以“撤消”自ROLLBACK以来的所有更改。

如果您希望多个BEGIN TRANSACTION操作全部由交易“保护”,您可以使用以下内容:

INSERT