Вызов результирующих наборов из сохраненного процесса - PullRequest
0 голосов
/ 09 ноября 2009

Я использую SQL 2000. У меня есть сохраненный процесс, spGetApplicantList, который нельзя изменить. Мне нужно получить уникальную LastNameInitials всех записей в этом хранимом процессе, чтобы список кандидатов можно было отсортировать по алфавиту.

В основном мне нужно

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

Как я могу создать новый сохраненный процесс, spGetLastNameInitial, используя набор записей, возвращенный из spGetApplicantList?

Не могу понять, что синтаксис правильный.

Ответы [ 2 ]

1 голос
/ 09 ноября 2009

Вы должны будете выполнить первый 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 вместо того, чтобы возвращать полный набор результатов - это избавит вас от необходимости загружать все данные во временную таблицу.

0 голосов
/ 09 ноября 2009

Это по этой ссылке: Вызов SP от SP

  1. Как использовать результаты одной хранимой процедуры в другой?

Пока хранимая процедура дает только один результат, методика использования вывода одной хранимой процедуры в другой довольно проста. Техника заключается в использовании временной таблицы для хранения результатов хранимой процедуры и инструкции INSERT EXEC для выполнения sproc и сохранения результатов. Как только результаты во временной таблице, они могут использоваться как любые другие данные таблицы. Вот пример процедуры, которую мы могли бы использовать повторно:

CREATE PROC usp_Demo_AllAuthors as

select * from pubs..authors

GO

Теперь вот хранимая процедура, которая использует результаты usp_Demo_AllAuthors:

CREATE proc usp_Demo_SPUser as

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

- Андрей Новик, эксперт по SQL Server

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...