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

问题描述:

我已经存储了proc1sp_DateFromRange哪个返回日期。 我有另一个存储proc2与其他数据返回表。storedproc2有日期参数@datefrom@dateto。现在如何将存储过程分配给在另一个存储过程中声明的参数

,我需要在storedproc2

分配storedproc1@datefrom是否有可能分配

+0

如何'proc1'返回日期?输出参数或结果集? – Andomar

+0

它返回结果集 –

不是,它是不可能的,你希望的方式。

下面是关于如何存储过程

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 

你也可以使用共享临时表。你会在我提供的文章中找到实现。

祝你好运!

参数@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 
+0

OP现在已评论日期在结果集中 – Andomar

+0

是的,我将编辑我的文章。 – Parado

+0

@Andomar如果可能的话,他可以将其更改为输出参数,对他来说更舒适。 – hgulyan

您可以使用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