来接分
为了必免是送分贴
问一点问题:
我SQL语法不太明这里问一下
BEGIN TRANSACTION
ROLLBACK
COMMIT TRANSACTION
是什么意思BEGIN TRANSACTION 事务开始?
ROLLBACK 退出事务?
COMMIT TRANSACTION 执行事务?
为了必免是送分贴
问一点问题:
我SQL语法不太明这里问一下
BEGIN TRANSACTION
ROLLBACK
COMMIT TRANSACTION
是什么意思BEGIN TRANSACTION 事务开始?
ROLLBACK 退出事务?
COMMIT TRANSACTION 执行事务?
ROLLBACK 退出事务? --這個是回滾
COMMIT TRANSACTION 执行事务? --這個是事务
ROLLBACK 退出事务? -----这个是回滚
COMMIT TRANSACTION 执行事务?
BEGIN TRANSACTION 事务开始
ROLLBACK 回滚事务
COMMIT TRANSACTION 提交事务
標記明確的本機交易的起點。BEGIN TRANSACTION 會以 1 遞增 @@TRANCOUNT。
ROLLBACK TRANSACTION
將外顯或隱含的交易復原至交易的開頭,或復原至交易中的安全點。COMMIT TRANSACTION
標示成功的隱含或使用者自訂交易的結尾。如果 @@TRANCOUNT 為 1,則 COMMIT TRANSACTION 自交易開始就會使執行的所有資料修改成為資料庫的永久部份、釋出連線所保存的資源,並使 @@TRANCOUNT 遞減至零。如果 @@TRANCOUNT 大於 1,則 COMMIT TRANSACTION 只會使 @@TRANCOUNT 減 1。
ROLLBACK 退出事务? --這個是回滾 回滚是不是重新来一次
ROLLBACK就是回到事务执行前的状态,不是重新来一次
刚才那贴测试过吗在触发器中加BEGIN TRANSACTION好像有点问题的
--------------------------------------------------------------------------------
应该没问题,上面的代码是测试回滚的情况.请在您的机器上试一下.
ROLLBACK 回滚事务
COMMIT TRANSACTION 提交事务
触发器中
BEGIN TRANSACTION --事务开始
和
COMMIT TRANSACTION --如果未遇到错误则提交事务,保存插入
可以去掉因为触发器本身已经开了事务的了
你可以在触发器中加
print @@TRANCOUNT
来查看事务的层数
是的,如果有需要在触发器中更新别的表失败时,要求该失败并不影响触发器本身的操作,那是需要启动多一个事务。
一般情况下,是需要回滚所有事务的。
ps:
我下午测试过你的代码
多谢关注!
ROLLBACK --回滾事务
COMMIT TRANSACTION --事务结束begin tran
....
if @@error<>0
begin
ROLLBACK tran
return
end
....
commit tran