语法不正确:包括select语句中存储过程的结果

时间:2014-10-29 10:23:08

标签: sql sql-server

我有一个执行此操作的存储过程...

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

任何想法?

4 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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

答案 2 :(得分: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 
  FIRST_NAME
, LAST_NAME
, POSTCODE
, dbo.ufnGetCounty(postcode)
FROM PEOPLE

答案 3 :(得分:0)

通过参考以下链接

使用视图或用户定义的功能

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

使用用户定义的功能 http://msdn.microsoft.com/en-us/library/aa175085%28SQL.80%29.aspx

一个过程可以返回多个结果集,每个结果集都有自己的模式。它不适合在SELECT语句中使用。

或者,尝试类似下面的内容

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