这是场景:
过程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”并执行完全相同的操作,则它会起作用。
我很困惑。任何人都知道为什么会这样吗?谢谢。
答案 0 :(得分:2)
根据MS SQL文档:
在存储过程中创建的本地临时表已删除 存储过程完成后自动执行。该表可以是 由存储执行的任何嵌套存储过程引用 创建表的过程。该表不能被 调用创建表的存储过程的过程。
https://docs.microsoft.com/en-us/sql/t-sql/statements/create-table-transact-sql?view=sql-server-2017