日期:2014-05-18  浏览次数:20435 次

存储过程嵌套调用问题
我共有两个存储过程分别简单描述为如下
usp_P1
as
declare   @dd1   as   datetime
declare   @dd2   as   datetime

……
……
select   @dd1   as   dd1   ,   @dd2   as   dd2
go


usp_P2
as
        …………
        exec   usp_P1
        …………
        在此处要利用usp_P1中的dd1和dd2值,该如何调用呢?
go

------解决方案--------------------
create table #tmp(dd1 ???, dd2 ???)
insert #tmp exec usp_P1
------解决方案--------------------
usp_P1
as
declare @dd1 as datetime
declare @dd2 as datetime

……
……
select @dd1 as dd1 , @dd2 as dd2
##TempTableName
go


usp_P2
as
…………
exec usp_P1
…………
-- 在此处要利用usp_P1中的dd1和dd2值,可以直接用#TempTableName表调用,
-- 如:select dd1,dd2 from #TempTableName
go

------解决方案--------------------
两种类方法,一种方式你创建一个临时表,将执行完存储过程返回的结果集插入到临时表。之后,你对临时表进行操作

create table #t()

insert into #t exec proName

select * from #t
另一种方法是直接利用上一个存储过程的结果集
select * from openrowset( 'sqloledb ', 'Trusted_Connection=yes ', 'exec Northwind.dbo.CustOrderHist ALFKI ')