使用1个存储过程中的表,该表仅在一周中的一天运行,作为对每天运行的另一个存储过程的引用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用1个存储过程中的表,该表仅在一周中的一天运行,作为对每天运行的另一个存储过程的引用相关的知识,希望对你有一定的参考价值。
我有一个存储过程让我们称之为ABC,它生成一个临时表## ref1。仅当工作日等于星期一时,此过程才会执行。
我有另一个存储过程让我们称之为XYZ,它生成一个输出表,它是来自ABC的## ref1的并集,同样很少有其他存储过程。
我得到一个错误,说## ref1是XYZ存储过程中的无效对象,因为## ref1仅在星期一创建。
如何在存储过程XYZ中纠正此错误?任何帮助,将不胜感激。
谢谢。
答案
而不是使用全局临时表,为什么不使用物理表。
在您的情况下,必须删除全局临时表。
全局临时表在创建后对任何用户和任何连接都是可见的,并且在引用该表的所有用户与SQL Server实例断开连接时将被删除。
如果创建全局临时表## employee,则数据库中的任何用户都可以使用此表。如果在创建表后没有其他用户使用此表,则断开连接时将删除该表。如果另一个用户在创建表后使用该表,则SQL Server会在断开连接后以及所有其他会话不再主动使用它之后将其删除。
另一答案
如果你真的需要使用全局临时表,那么这样的东西应该工作:
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