【问题标题】:does it drop temp table (created in transaction) if rollback transaction in sql server?如果在 sql server 中回滚事务,它会删除临时表(在事务中创建)吗?
【发布时间】:2025-12-01 09:30:01
【问题描述】:

在事务中,我创建了一些临时表并插入了一些数据。如果一切顺利,临时表将被删除,然后事务将被提交。如果有异常,连接将关闭。

我的问题是:我必须在关闭连接之前回滚事务吗?或者,只要连接关闭就可以了?

如果我回滚,我假设在事务中创建的临时表也将被删除(回滚),对吗?

谢谢

【问题讨论】:

    标签: c# .net sql sql-server sql-server-2008


    【解决方案1】:

    临时表超出范围时将被删除。

    但是,在打开事务时失去连接会创建一个孤立的事务,并且它持有的任何锁都将保留。

    一旦遇到运行时错误,使用 SET XACT_ABORT 应该回滚任何事务。

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

    【讨论】:

    • 为了在此处添加一些清晰性,如果您在 C# 中捕获并关闭连接,您将在异常之外关闭它并且不会导致孤立。如果您的过程导致异常,则可能是孤立的。
    • 就我个人而言,我更喜欢使用 TRY CAtCH 块和特定的回滚,这样我也可以在回滚后捕获错误和/或导致日志表中错误的数据。如果您正在做的事情足够复杂以至于需要显式事务,那么您可能希望日志记录能够在以后发生问题时对其进行故障排除。
    【解决方案2】:

    临时表一旦超出范围就会立即删除。无论它是否回滚,关闭连接都会使其超出范围。

    【讨论】:

      最近更新 更多