2014-10-29 58 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