2009-11-09 82 views
0

我正在使用SQL 2000.我有一個存儲過程,spGetApplicantList,它不能被修改。我需要獲取該存儲過程中所有記錄的唯一LastNameInitials,因此申請人列表可以按字母順序排序。從storedproc調用結果集

基本上我需要的是

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

如何創建一個新的存儲過程,spGetLastNameInitial,通過使用從spGetApplicantList返回的記錄?

我似乎無法得到正確的語法。

回答

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,而不是返回整個結果集 - 這將節省您不必將所有的數據加載到一個臨時表。

+0

我想你的代碼,卻得到了一個「服務器:消息213,級別16,狀態7,過程spGetApplicantList,線371 插入錯誤:列名或號碼提供的值與表定義不匹配。「 – DotNetRookie 2009-11-09 13:30:01

+1

您需要確保#TempResults表的定義與spGetApplicantList返回的列完全相同。因爲我不知道哪些列/數據類型的sproc返回,我只是給出了一個基本的例子,假設它只返回一個類型爲VARCHAR(50) – AdaTheDev 2009-11-09 13:44:21

+0

類型的「LastName」列所以我猜它不可能只插入LastName列臨時表?我必須鏡像臨時表以反映spGetApplicantList中的列? – DotNetRookie 2009-11-09 14:02:49

0

這是從這個鏈接: Calling SP from SP

  • 如何使用從一個存儲過程的結果在另一個?
  • 只要存儲過程只產生一個結果,在另一個存儲過程中使用輸出的技術就非常簡單。該技術是使用臨時表來保存存儲過程的結果,並使用INSERT EXEC語句來執行存儲過程並保存結果。一旦結果在臨時表中,它們可以像任何其他表數據一樣使用。下面是我們可能想重新使用的示例:

    CREATE PROC usp_Demo_AllAuthors作爲

    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

    -Andrew諾維克時,SQL Server專家