如何将临时表列传递给存储过程?

时间:2014-04-25 15:18:29

标签: sql sql-server tsql stored-procedures parameters

我有一个存储过程调用其中的另一个存储过程。我创建了一个临时表,其中包含我想要传递给内部存储过程的值。有没有办法在不必创建一堆变量的情况下做到这一点?

一个例子:

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

2 个答案:

答案 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