为什么从自联接临时表更新真实表不起作用,但当使用真实表时却起作用



以下是场景:

步骤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",并做完全相同的事情,它就会起作用。

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

根据MS SQL文档:

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

https://learn.microsoft.com/en-us/sql/t-sql/statements/create-table-transact-sql?view=sql-服务器-2017

相关内容

最新更新