我有一个程序让我们称之为
caller
创建临时表的过程
#temp1
并执行另一个过程让我们称之为
callee
将一些值插入到#temp1 表中的过程,以便调用者过程可以使用它。现在的问题是我的被调用程序只能通过调用者或其他创建#temp1 表然后执行被调用者的程序来调用。有没有办法像引入'If'条件检查被调用者是否已被调用者调用然后只执行语句
'insert #temp1 ....'
和其他明智的避免它。
谢谢
我有一个程序让我们称之为
caller
创建临时表的过程
#temp1
并执行另一个过程让我们称之为
callee
将一些值插入到#temp1 表中的过程,以便调用者过程可以使用它。现在的问题是我的被调用程序只能通过调用者或其他创建#temp1 表然后执行被调用者的程序来调用。有没有办法像引入'If'条件检查被调用者是否已被调用者调用然后只执行语句
'insert #temp1 ....'
和其他明智的避免它。
谢谢
您可以实现逻辑以知道谁调用了“被调用者”过程 - 将参数添加到“被调用者”,默认值 = 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
如果被调用者将始终生成单个结果集,并且如果它可用,则应该插入该结果集#temp1
,那么您可以考虑将其转移INSERT
到外部过程中,使用INSERT ... EXEC
inside caller
:
CREATE procedure caller
as
--Various things
create table #temp1 (column1,column2)
--Other things
insert into #temp1 (column1,column2) exec callee
--Work with #temp1