我有一个程序让我们称之为
caller
创建临时表的过程
#temp1
和exec另一个程序让我们调用
callee
将一些值插入#temp1表的过程,以便调用程序可以使用它。现在的问题是我的被调用程序只能通过调用者或其他创建#temp1表然后执行被调用者的过程来调用。是否有一种方法,如引入一个'If'条件检查调用者是否已调用被调用者然后只执行语句
'insert #temp1 ....'
以及其他明智的避免它。
谢谢
答案 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