有人可以给我一个实时的例子,我在stackexchange中找到了下面的临时表和表变量示例

时间:2015-03-30 00:54:54

标签: sql sql-server temp-tables table-variable

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

@table_variables上的操作作为系统事务执行,独立于任何外部用户事务,而等效的#temp table操作将作为用户事务本身的一部分执行。因此,ROLLBACK命令会影响#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

有谁能告诉我这个上面提到的应用/场景什么时候会实时使用?任何人都可以给出一个实时的例子。感谢

P.S。 - 参考此链接:https://dba.stackexchange.com/questions/16385/whats-the-difference-between-a-temp-table-and-table-variable-in-sql-server/16386#16386

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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