临时表和表变量之间的区别如下:
@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
有谁能告诉我这个上面提到的应用/场景什么时候会实时使用?任何人都可以给出一个实时的例子。感谢
答案 0 :(得分:0)
正在发生的事情是,开发人员正在演示临时表的使用(对于大多数意图与常规表相同)和一个表变量。当发生回滚时,对临时表所做的任何更改都将被撤消(该表与事务启动之前处于相同状态)但变量已更改 - 它不受回滚的影响。
答案 1 :(得分:0)
在一个真实的例子中,只考虑你有一个事务,并且以某种方式你的事务回滚,但你仍然想记录并查看事务失败的原因并尝试保留日志,直到你执行事务而没有任何回滚。
在此示例中,您可以将所有日志信息捕获到表变量中。