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

时间:2014-07-16 13:52:16

标签: sql sql-server sql-server-2008

请考虑以下事项:

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,但这不起作用。我在SQL Server 2008上。

2 个答案:

答案 0 :(得分:1)

临时表实际上出现在他们自己的数据库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.

答案 1 :(得分:0)

临时表没有使用数据库引用进行创建,因此在tempdb中创建。 只有来源可以用"使用"或" dbname.dbo.mytable"。

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

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

  

从#db1_tmp中选择*左侧连接#db2_tmp b on a.uid = b.uid;