我有一个执行此操作的存储过程...
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 :(得分: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