从存储过程调用结果集

时间:2009-11-09 12:49:54

标签: sql sql-server stored-procedures

我正在使用SQL 2000.我有一个存储过程,spGetApplicantList,无法修改。我需要获取该存储过程中所有记录的唯一LastNameInitials,因此可以按字母顺序对申请人列表进行排序。

基本上我需要的是

SELECT DISTINCT LEFT(LastName, 1) as [LastNameInitial]
FROM spGetApplicantList
ORDER BY LastnameFirstInitial

如何使用spGetLastNameInitial返回的记录集创建新的存储过程spGetApplicantList

我似乎无法正确使用语法。

2 个答案:

答案 0 :(得分:1)

您必须将第一个sproc spGetApplicantList执行到临时表中,然后查询它。不幸的是,你不能在SELECT语句中内联调用存储过程。

-- Create temp table, with the schema matching the results of spGetApplicantList 
CREATE TABLE #TempResults
(
LastName VARCHAR(50)
)

INSERT #TempResults
EXECUTE spGetApplicantList

Select DISTINCT LEFT(LastName, 1) as [LastNameInitial] from #TempResults Order by LastnameFirstInitial

DROP TABLE #TempResults

另一种方法是,您是从原始存储过程复制SELECT,而只是执行DISTINCT而不是返回完整的结果集 - 这样可以节省您必须将所有数据加载到临时表中。

答案 1 :(得分:0)

这是来自此链接: Calling SP from SP

  1. 如何在另一个存储过程中使用结果?
  2. 只要存储过程只产生一个结果,在另一个存储过程中使用一个存储过程的输出的技术就非常简单。该技术是使用临时表来保存存储过程的结果,使用INSERT EXEC语句来执行sproc并保存结果。一旦结果在临时表中,就可以像任何其他表数据一样使用它们。这是我们可能要重用的示例过程:

    创建PROC usp_Demo_AllAuthors为

    select * from pubs..authors
    

    GO

    现在这是一个使用usp_Demo_AllAuthors结果的存储过程:

    创建proc usp_Demo_SPUser为

    CREATE TABLE #Authors (
     au_id varchar(11) NOT NULL PRIMARY KEY CLUSTERED,
     au_lname varchar (40) NOT NULL ,
     au_fname varchar (20) NOT NULL ,
     phone char (12) NOT NULL,
     address varchar (40) NULL ,
     city varchar (20) NULL ,
     state char (2) NULL ,
     zip char (5) NULL ,
     contract bit NOT NULL
    )
    
    -- Execute usp_Demo_AllAuthors storing the
    -- results in #Authors
    insert into #Authors
     exec usp_Demo_AllAuthors
    
    -- Here we use the #Authors table.  This example only
    -- only selects from the temp table but you could do much
    -- more such as use a cursor on the table or join with 
    -- other data.
    SELECT au_fName + ' ' + au_lname as [name]
         , address+', '+city+', '+state+' '+zip [Addr] 
        from #Authors
    
    DROP TABLE #Authors
    

    GO

    -Andrew Novick,SQL Server专家