sql-server – 可以在SQL Server 2008中使用存储过程作为子查询吗?

前端之家收集整理的这篇文章主要介绍了sql-server – 可以在SQL Server 2008中使用存储过程作为子查询吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有两个存储过程,其中一个返回一个付款列表,另一个返回这些付款的摘要,按货币分组.现在,我有一个重复的查询:返回付款列表的存储过程的主要查询是存储过程的子查询,它以货币形式返回付款摘要.我想通过使存储过程返回支付列表的存储过程来消除这种重复,该子查询是按货币返回付款摘要的存储过程的子查询.在sql Server 2008中有可能吗?

解决方法

你最好将第一个proc转换成TABLE-VALUED函数.如果它涉及多个语句,则需要首先定义返回表结构并进行填充.

样品:

CREATE proc getRecords @t char(1)
as
set nocouut on;
-- other statements --
-- final select
select * from master..spt_values where type = @t
GO

– 成为 –

CREATE FUNCTION fn_getRecords(@t char(1))
returns @output table(
    name sysname,number int,type char(1),low int,high int,status int) as
begin
-- other statements --
-- final select
insert @output
select * from master..spt_values where type = @t
return
end;

但是,如果是直接选择(或者可以作为单个语句编写),则可以使用INLINE tvf表单,这是高度优化的

CREATE FUNCTION fn2_getRecords(@t char(1))
returns table as return
-- **NO** other statements; single statement table --
select * from master..spt_values where type = @t

第二个proc只是从第一个proc中选择

create proc getRecordsByStatus @t char(1)
as
select status,COUNT(*) CountRows from dbo.fn2_getRecords(@t)
group by status

你曾经打电话的地方

EXEC firstProc @param

要获得结果,您现在可以从中选择

SELECT * FROM firstProc(@param)

猜你在找的MsSQL相关文章