临时表在程序之间共享

时间:2013-04-09 08:33:35

标签: sql-server-2008

我有一个程序让我们称之为

caller 

创建临时表的过程

#temp1 

和exec另一个程序让我们调用

callee

将一些值插入#temp1表的过程,以便调用程序可以使用它。现在的问题是我的被调用程序只能通过调用者或其他创建#temp1表然后执行被调用者的过程来调用。是否有一种方法,如引入一个'If'条件检查调用者是否已调用被调用者然后只执行语句

'insert #temp1 ....'

以及其他明智的避免它。

谢谢

2 个答案:

答案 0 :(得分:1)

你可以实现逻辑以便知道谁调用了过程“callee” - 将param添加到“callee”并使用默认值= NULL(例如),然后通过添加带有值的param来仅更改“调用者”过程1(例如)。在“callee”过程中检查此参数的值,如果它与NULL不同,则使用临时表。

代码示例:

create procedure [callee]
(
@CalledByCaller bit = NULL
)
as 
set nocount on 
If @CalledByCaller =1 
begin 
    SELECT '3'
    --work with temp table
end
SELECT '2'
go

create procedure [caller] 
as
set nocount on 

exec [callee] @CalledByCaller =1 

go

答案 1 :(得分:0)

如果 callee将始终生成单个结果集,并且该结果集应该插入#temp1(如果可用),那么您可以考虑转移INSERT使用INSERT ... EXEC内的caller

进入外部程序
CREATE procedure caller
as
   --Various things
   create table #temp1 (column1,column2)
   --Other things
   insert into #temp1 (column1,column2) exec callee
   --Work with #temp1