如何将存储过程分配给在另一个存储过程中声明的参数
问题描述:
我已经存储了proc1
sp_DateFromRange
哪个返回日期。 我有另一个存储proc2
与其他数据返回表。storedproc2
有日期参数@datefrom
和@dateto
。现在如何将存储过程分配给在另一个存储过程中声明的参数
,我需要在storedproc2
分配storedproc1
到@datefrom
是否有可能分配
答
不是,它是不可能的,你希望的方式。
下面是关于如何存储过程
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
答
您可以使用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
如何'proc1'返回日期?输出参数或结果集? – Andomar
它返回结果集 –