如何正确访问在另一个数据库中创建的临时表



请考虑以下事项:

use db1;
select * into #db1_tmp from mytable;
use db2;
select * into #db2_tmp from myothertable;
-- join temp table 1 and 2
select * from #db1_tmp a
left join db2_tmp b on where a.uid = b.uid;

这可以工作,但是SQL Server Management Studio在最后一个查询中使用红色下划线标记#db1_tmp,因此在所有依赖于此表的其他语句中。

问题:访问在另一个数据库中创建的临时表以防止这种下划线发生的正确方法是什么?我试过db1.#db1_tmp,但这不起作用。

临时表实际上出现在它们自己的数据库TempDB中。我认为你的问题的根源是use声明。试试这个:

select * into #db1_tmp from db1.dbo.mytable;
select * into #db2_tmp from db2.dbo.myothertable;
-- join temp table 1 and 2
select * from #db1_tmp a
left join db2_tmp b on where a.uid = b.uid;

但是,如果这是您所做的范围(创建临时表只是为了跨数据库进行连接),您可以完全跳过临时表:

select * from db1.dbo.mytable a join db2.dbo.myothertable b on a.uid = b.uid.

临时表不使用数据库引用进行创建,因此在tempdb中创建。只有源文件可以通过"use"或"dbname.dbo.mytable"修改。

红色下划线是由于智能感知。临时表在执行之前被识别为普通表,并且由于数据库更改而被重新标记。

注意:最后的select查询有语法错误。应该是

select * from #db2_tmp a left join #db2_tmp b on a.u d = b.u d;

最新更新