如何将存储过程分配给在另一个存储过程中声明的参数

时间:2012-09-13 07:01:03

标签: sql sql-server-2008 stored-procedures

我已存储了返回日期的proc1 sp_DateFromRange。 我有另一个存储的proc2,它返回包含其他数据的表格。storedproc2包含日期参数@datefrom@dateto

现在,我需要在storedproc1

中将@datefrom分配给storedproc2

是否可以分配

3 个答案:

答案 0 :(得分:1)

不是,你想要的方式不可能。

这是一篇关于如何在存储过程之间共享数据的有趣文章

How to Share Data between Stored Procedures

在我看来,最简单的方法是使用输出参数临时表。有关更多信息,请查看链接。这是使用输出参数的简单方法。

DECLARE @datefrom smalldatetime

Exec storedproc1 @datefrom OUTPUT 

Exec storedproc2 @datefrom

这是使用临时表从存储过程中获取结果集的另一个简单示例

DECLARE @datefrom smalldatetime

CREATE TABLE #tmp (dateFrom smalldatetime)

INSERT #tmp
EXEC storedproc1

SELECT TOP 1 @datefrom = dateFrom FROM #tmp 

Exec storedproc2 @datefrom

您还可以使用共享临时表。您将在第I条中找到实施方案。

祝你好运!

答案 1 :(得分:0)

参数@datefrom必须是sp_DateFromRange中的输出参数:

create procedure DateFromRange(
  @datefrom datetime = null output
)
as begin
--body
end

你可以尝试:

declare @date datetime

exec sp_DateFromRange @date out

exec storedproc2 @datefrom = @date ,  @dateto = @value
or
exec storedproc2 @date,  @value

编辑:

使用结果集

declare @date datetime

exec @date = sp_DateFromRange

exec storedproc2 @datefrom = @date ,  @dateto = @value
or
exec storedproc2 @date,  @value

答案 2 :(得分:0)

您可以使用insert ... exec捕获存储过程的输出集。要插入的表的定义必须与存储过程的输出完全匹配。

例如:

if object_id('proc1') is not null
    drop procedure proc1
if object_id('proc2') is not null
    drop procedure proc2
go
create procedure proc1
as
select getdate() as col1
go
create procedure proc2
    @col2 datetime
as
print 'Col2 = ' + cast(@col2 as varchar(24))
go
declare @sp_result table (col1 datetime)

insert  @sp_result
exec    proc1

declare @col1 datetime
select  @col1 = col1
from    @sp_result

exec proc2 @col1

打印:

(1 row(s) affected)
Col2 = Sep 13 2012  9:11AM