我正在使用SQL 2000.我有一个存储过程,spGetApplicantList
,无法修改。我需要获取该存储过程中所有记录的唯一LastNameInitials
,因此可以按字母顺序对申请人列表进行排序。
基本上我需要的是
SELECT DISTINCT LEFT(LastName, 1) as [LastNameInitial]
FROM spGetApplicantList
ORDER BY LastnameFirstInitial
如何使用spGetLastNameInitial
返回的记录集创建新的存储过程spGetApplicantList
?
我似乎无法正确使用语法。
答案 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
只要存储过程只产生一个结果,在另一个存储过程中使用一个存储过程的输出的技术就非常简单。该技术是使用临时表来保存存储过程的结果,使用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专家