使用1个存储过程中的表,该表仅在一周中的一天运行,作为对每天运行的另一个存储过程的引用

时间:2018-03-06 16:10:52

标签: sql-server stored-procedures

我有一个存储过程让我们称之为ABC,它生成一个临时表## ref1。仅当工作日等于星期一时,此过程才会执行。

我有另一个存储过程让我们称之为XYZ,它生成一个输出表,它是来自ABC的## ref1的并集,同样很少有其他存储过程。

我收到错误,说## ref1是XYZ存储过程中的无效对象,因为## ref1仅在星期一创建。

如何在存储过程XYZ中纠正此错误?任何帮助,将不胜感激。

谢谢。

2 个答案:

答案 0 :(得分:0)

为什么不使用物理表,而不是使用全局临时表。

在您的情况下,必须删除全局临时表。

任何用户及创建后的任何连接都可以看到全局临时表,当引用该表的所有用户与SQL Server实例断开连接时将被删除。

  

如果您创建全局临时表## employee,那么该用户中的任何用户   数据库可以使用此表。如果没有其他用户使用此功能   在创建表后,在断开连接时删除表。   如果其他用户在创建表后使用该表,则为SQL Server   断开连接后和所有其他会话都没有后删除它   更积极地使用它。

您可以详细了解herehere

答案 1 :(得分:0)

如果你真的需要使用全局临时表,那么这样的事情应该有效:

create stored procedure xyz as 
begin
 create table #result (id int)

if object_id('tempdb..##ref1 ') is not null
insert into #result
select * from ##ref1 

-- do you stuff here
drop table #result
end