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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用1个存储过程中的表,该表仅在一周中的一天运行,作为对每天运行的另一个存储过程的引用相关的知识,希望对你有一定的参考价值。

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

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

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

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

谢谢。

答案

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

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

全局临时表在创建后对任何用户和任何连接都是可见的,并且在引用该表的所有用户与SQL Server实例断开连接时将被删除。

如果创建全局临时表## employee,则数据库中的任何用户都可以使用此表。如果在创建表后没有其他用户使用此表,则断开连接时将删除该表。如果另一个用户在创建表后使用该表,则SQL Server会在断开连接后以及所有其他会话不再主动使用它之后将其删除。

您可以获得有关此herehere的更多详细信息

另一答案

如果你真的需要使用全局临时表,那么这样的东西应该工作:

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

以上是关于使用1个存储过程中的表,该表仅在一周中的一天运行,作为对每天运行的另一个存储过程的引用的主要内容,如果未能解决你的问题,请参考以下文章

如何在一周中的每一天的每一天中创建空条目

订购一周中的一天[重复]

SQL查询,用于在一周中的每一天为项目排序的EACH类别中查找UNITS

我有 8 年的日常数据。我想绘制一周中的每一天、一年中的每周和一年中的每个月的所有值。我怎么做?

MySQL - 计算一周中每一天但每个发件人的所有行

使用时间跨度存储星期几的最佳方式