以下是场景:
步骤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