我有一个存储过程调用其中的另一个存储过程。我创建了一个临时表,其中包含我想要传递给内部存储过程的值。有没有办法在不必创建一堆变量的情况下做到这一点?
一个例子:
CREATE PROCEDURE usr_AdminSaveChanges
-- Add the parameters for the stored procedure here
@blah varchar(5) = NULL,
@tid int = NULL
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- only returns one row
select testid, testfoo, testbar
into #testtemp
from testtable
where tid = @tid
exec usr_updateTestSP #testtemp.testid, @blah, #testtemp.testbar
END
答案 0 :(得分:0)
您可以使用表变量并将其作为参数传递,然后您可以将该表变量作为另一个SP
中的常规表进行查询。
DECLARE @t table(
testid int,
testfoo int,
testbar int
)
select testid, testfoo, testbar
into @t
from testtable
where tid = 2
exec usr_updateTestSP @t
表变量在大型数据集上运行时可以创建高I / O.
答案 1 :(得分:0)
实际上,您不必做任何事情,在调用过程中创建的临时表将自动从被调用过程内部可见(但反之亦然)。只要确保你没有一个名称相同的临时表。
有关更多信息和其他选项,请参阅此处:
http://sommarskog.se/share_data.html
这是一个简化的示例:
create procedure proc1
as
create table #t1(i int)
insert #t1 values (1)
exec proc2
go
create procedure proc2
as
select *
from #t1
go
exec proc1