假设我有以下声明
INSERT INTO myTable
(colums)
VALUES (values)
如果出于某种原因,其中一个操作失败了怎么办?一切都将被停止,所有成功的插入将被回滚吗?
如果出现问题,我只希望插入失败。但所有其余的前后都要继续前进。
感谢您的帮助
答案 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