为什么从自连接临时表更新实际表不起作用,但是使用真实表时有效吗?

时间:2018-07-24 21:28:11

标签: sql-server temp-tables

这是场景:

过程1创建临时表#t。

过程1执行过程2。

程序2填充#t。

在过程1中,我只是从#t插入真实表中,以便查看数据。 数据在那里。

查看此数据后,我立即使用自联接进行更新。像这样:

  update b
  set b.column1 = a.column3
  from #t a
    inner join #t b on a.id = b.id;

应该更新的记录未更新。

但是,如果我将#t更改为真实的表“ dbo.t”并执行完全相同的操作,则它会起作用。

我很困惑。任何人都知道为什么会这样吗?谢谢。

1 个答案:

答案 0 :(得分:2)

根据MS SQL文档:

  

在存储过程中创建的本地临时表已删除   存储过程完成后自动执行。该表可以是   由存储执行的任何嵌套存储过程引用   创建表的过程。该表不能被   调用创建表的存储过程的过程。

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-table-transact-sql?view=sql-server-2017