SQL Server中的临时表

11

我正在研究如何在SQL Server中创建临时表。我成功地创建了临时表,但当我尝试查看数据时,它显示“无效对象名称”。 请问临时表存在多长时间? 如果我使用用户名为devloper,密码为0999登录到SQL Server,同时有其他人也使用相同的凭据登录到SQL Server,那么这个临时表会被删除吗? 以下是我的SQL语句:

SELECT net_node_model.SYS_ID, net_node_model.NODE, mst_temp_equation.TEMP_ID,
       mst_temp_equation.EQ_ID
INTO ##NT_MASTER_TEMP_EQUATION
FROM mst_temp_equation INNER JOIN
     net_node_model ON mst_temp_equation.TEMP_ID = net_node_model.TEMP_ID
GROUP BY net_node_model.SYS_ID, net_node_model.NODE, mst_temp_equation.TEMP_ID,
         mst_temp_equation.EQ_ID, mst_temp_equation.EQ_NAME,
         mst_temp_equation.EQ_TYPE, mst_temp_equation.[OBJECT],
         mst_temp_equation.VAR_TYPE, mst_temp_equation.VAR_NAME,
         mst_temp_equation.VAR_SUBSET, mst_temp_equation.VAR_SET,
         mst_temp_equation.RHS_RELN, mst_temp_equation.RHS_OBJECT,
         mst_temp_equation.RHS_VAR_SET, mst_temp_equation.RHS_VAR_SUBSET,
         mst_temp_equation.RHS_VAR_TYPE, mst_temp_equation.RHS_VAR_NAME,
         mst_temp_equation.EQ_TP_OFFSET, mst_temp_equation.RHS_TP_OFFSET,
         mst_temp_equation.RETAIN, mst_temp_equation.TIME_PRD,
         mst_temp_equation.EQ_VAR_SUBTYPE, mst_temp_equation.RHS_VAR_SUBTYE;

1
你能发一下你正在使用的SQL吗? - Neil Knight
4个回答

20

如果您使用普通的临时表#table,那么除了创建该表的会话之外,其他任何会话都无法看到它。一旦该会话结束,该表将被删除。

如果您使用全局临时表##table,则其他会话可以看到它。

来自MSDN - CREATE TABLE,在temporary tables下:

全局临时表在创建该表的会话结束后和所有其他任务停止引用它们时会自动删除。


我不确定在尝试使用SELECT查询从我的临时表中选择记录时,是否应该使用#或##。它显示“INVALID OBJECT NAME”。 - CPDS
@us111 - 如果创建该会话的会话已经结束,并且该表没有被任何其他正在运行的任务引用,它将自动删除。 - Oded
我没有关闭会话...我正在进行一些测试,所以首先运行存储过程1创建临时表1,然后立即尝试执行选择查询以查看记录,但它显示“无效对象名称”。 - CPDS
2
@us111 - 存储过程执行完毕后,会话也随之结束。 - Oded
哦,好的...那么如果我有一些需要按顺序执行的存储过程,我该怎么做呢? - CPDS
1
@us111 - 在一个事务中运行它们所有,或者从一个存储过程中调用它们。 - Oded

0

您是说您已经创建了##NT_MASTER_TEMP_EQUATION表,现在正在尝试向其中插入数据吗?如果是这样,请使用语法INSERT INTO ##NT_MASTER_TEMP_EQUATION SELECT ...而不是您目前使用的方法。

SELECT ... INTO ##temp FROM ...用于同时创建表格和填充数据。


此外,在您的SELECT列表末尾(就在INTO关键字之前)有一个流氓的逗号。应该将其删除。

逗号是打字错误...实际查询中没有逗号。是的,我正在创建并插入表中的记录。 - CPDS

0
如果这是您使用的确切查询,则我认为您在第一行中可能有语法错误,看起来关键字INTO之前有一个额外的逗号。
...mst_temp_equation.EQ_ID,  INTO ##NT_MASTER_TEMP_EQUATION
                          ^

不确定这是否导致“INVALID OBJECT NAME”错误。


抱歉,有一个打字错误,EQ_ID后面没有逗号。 - CPDS

0

这里似乎你创建了全局临时表。请注意,当您希望结果集对所有其他会话可见时,全局临时表非常有用。无需设置权限。任何人都可以向表中插入值、修改或检索记录。还要注意,任何人都可以删除该表。

一旦会话断开连接,这些表将自动删除。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接