1

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

caller 

创建临时表的过程

#temp1 

并执行另一个过程让我们称之为

callee

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

'insert #temp1 ....'

和其他明智的避免它。

谢谢

4

2 回答 2

1

您可以实现逻辑以知道谁调用了“被调用者”过程 - 将参数添加到“被调用者”,默认值 = NULL(例如),然后通过添加这个值为 1 的参数仅更改“调用者”过程(例如)。在“被调用者”过程中检查此参数的值,如果它不同于 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
于 2013-04-09T08:41:58.747 回答
0

如果被调用者将始终生成单个结果集,并且如果它可用,则应该插入该结果集#temp1,那么您可以考虑将其转移INSERT到外部过程中,使用INSERT ... EXECinside caller

CREATE procedure caller
as
   --Various things
   create table #temp1 (column1,column2)
   --Other things
   insert into #temp1 (column1,column2) exec callee
   --Work with #temp1
于 2013-04-09T08:52:42.400 回答