2

临时表和表变量之间的区别如下:

上的操作@table_variables作为系统事务执行,独立于任何外部用户事务,而等效#temp table操作将作为用户事务本身的一部分执行。出于这个原因,ROLLBACK命令将影响 a#temp table@table_variable保持不变。

DECLARE @T TABLE(X INT)
CREATE TABLE #T(X INT)

BEGIN TRAN

INSERT #T
OUTPUT INSERTED.X INTO @T
VALUES(1),(2),(3)

/*Both have 3 rows*/
SELECT * FROM #T
SELECT * FROM @T

ROLLBACK

/*Only table variable now has rows*/
SELECT * FROM #T
SELECT * FROM @T
DROP TABLE #T

谁能告诉我什么时候会实时使用上述应用程序/场景?谁能给出一个实时的例子。谢谢

PS - 从此链接引用:https ://dba.stackexchange.com/questions/16385/whats-the-difference-between-a-temp-table-and-table-variable-in-sql-server/16386#16386

4

2 回答 2

0

正在发生的事情是,开发人员正在演示临时表(大多数情况下与常规表相同)和作为表的变量的使用。当发生回滚时,对临时表所做的任何更改都将撤消(该表处于与事务开始之前相同的状态)但变量已更改 - 它不受回滚的影响。

于 2015-03-30T01:36:20.317 回答
0

在一个真实的例子中,只要考虑你有一个事务并且你的事务以某种方式回滚,但你仍然想记录并查看事务失败的原因,并尝试保留日志直到你执行没有任何回滚的事务。

在此示例中,您可以将所有日志信息捕获到表变量中。

于 2015-03-30T03:17:06.563 回答