【发布时间】:2019-06-18 20:39:25
【问题描述】:
我正在尝试在 MS sql 服务器中创建一个临时表。它的显示就像创建了表并插入了值。使用 Select 查询时,会引发错误。
我的示例代码是
EXEC (
'create table #temp2 (id int)
insert #temp2 values(1)'
)
SELECT *
FROM #temp2
输出是
(受影响的 1 行)
消息 208,第 16 级,状态 0,第 8 行
无效的对象名称“#temp2”。
【问题讨论】:
-
临时表只存在,只能在创建它的会话中被引用;您不能使用
EXEC创建新会话然后引用该表。你为什么在这里使用EXEC?您的查询没有任何动态。 -
EXEC中创建的临时表在EXEC完成时被删除。尽管EXEC实际上并没有创建新会话,但它确实为临时表创建了一个新的、单独的范围。 -
感谢您的回复。这是我的示例代码。在我的实际代码中,根据用户的不同,我在不同的列类型中有不同的列数。所以我需要动态创建一个临时表。
-
那么您唯一的办法就是将所有语句(包括访问表的语句)移到
EXEC中。通常这种代码会变得非常笨拙,您应该强烈考虑完全改变您的方法以消除对动态对象的依赖(例如,您可以使用键值表),或者从客户端代码中执行此操作。 -
Jeroem Mostert,是否有任何解决方案可以创建临时表并在同一会话中使用它?