2014-10-29 37 views
1

存儲過程的結果我有一個存儲過程,這是否......不正確的語法:包括在SELECT語句

CREATE PROCEDURE spGetRegion @postcode nvarchar(10) 
AS 
SELECT capt FROM REGION_DATA 
where POSTCODE = @postcode 
go 

這意味着我可以運行

exec spGetCounty @postcode = 'rh12' 

並返回一個區域,如「東南部」

是否可以在select語句中包含像這樣的存儲過程的結果,例如

SELECT 
    FIRST_NAME 
, LAST_NAME 
, POSTCODE 
, << NEED TO INCLUDE RESULTS OF STORED PROCEDURE HERE PASSING IN POSTCODE 
FROM PEOPLE 

因此,像

SELECT 
    FIRST_NAME 
, LAST_NAME 
, POSTCODE 
, exec spGetCounty @postcode = 'rh12' << THIS BIT DOESN'T WORK !! 
FROM PEOPLE 

什麼想法?

+0

u可以使用表值函數... – 2014-10-29 10:27:50

+0

選中此http://stackoverflow.com/questions/14506871/how-to-execute-a-stored- procedure-inside-a-select-query – 2014-10-29 10:30:46

回答

2

而是一個存儲過程,可以考慮使用一個標量函數:

CREATE FUNCTION spGetRegion (
    @postcode nvarchar(10) 
) 
RETURNS varchar(255) 
BEGIN 
    DECLARE @capt varchar(255); 

    SELECT @capt = capt 
    FROM REGION_DATA 
    where POSTCODE = @postcode; 

    RETURN(@capt); 
END; 

然後你可以叫它如:

SELECT FIRST_NAME, LAST_NAME, POSTCODE, 
     dbo.spGetRegion('rh12'); 
FROM PEOPLE; 
+0

你已經提到'returns INT'並且你已經返回了varchar – Hitesh 2014-10-29 10:33:23

+0

@HHH。 。 。謝謝。 OP沒有指定類型,所以我不確定使用哪種類型。顯然,我中途改變了主意。 – 2014-10-29 10:51:18

0

你需要創建一個功能

CREATE function spGetRegion 
(
    @postcode nvarchar(10) 
) 
RETURNS varchar(100) 
as 
begin 

    SELECT capt FROM REGION_DATA 
    where POSTCODE = @postcode 

end 

,並用它在你的查詢關鍵詞,比如

SELECT 
FIRST_NAME 
, LAST_NAME 
, POSTCODE 
, dbo.spGetCounty('rh12') 
FROM PEOPLE 
0

不,你不能在SELECT語句中使用存儲過程。

您必須使用用戶定義的功能 - 定標器功能

CREATE FUNCTION [dbo].[ufnGetCounty] 
(
    @postcode nvarchar(10) 
) 
RETURNS VARCHAR(200) 
AS 
BEGIN 
    DECLARE @capt VARCHAR(200) 

    SELECT @capt = capt FROM REGION_DATA 
    where POSTCODE = @postcode 

    RETURN @capt 
END 

,然後你可以用它在select語句這樣的 -

SELECT 
    FIRST_NAME 
, LAST_NAME 
, POSTCODE 
, dbo.ufnGetCounty(postcode) 
FROM PEOPLE 
0

使用vi通過下面參照EW或用戶定義的函數使用用戶定義的函數 http://msdn.microsoft.com/en-us/library/aa175085%28SQL.80%29.aspx

過程可以返回多個結果集,每個都有其自己的模式鏈接

使用視圖, http://msdn.microsoft.com/en-us/library/aa258253%28SQL.80%29.aspx

。它不適合在SELECT語句中使用。

或替代,你可以試試下面

SELECT * FROM  
    OPENQUERY(YOURSERVERNAME, 'EXEC MyProc @parameters') 
    WHERE somefield = anyvalue