语法错误:在 select 语句中包含存储过程的结果
Posted
技术标签:
【中文标题】语法错误:在 select 语句中包含存储过程的结果【英文标题】:incorrect syntax : including results of stored procedure in select statement 【发布时间】:2014-10-29 10:23:07 【问题描述】:我有一个执行此操作的存储过程...
CREATE PROCEDURE spGetRegion @postcode nvarchar(10)
AS
SELECT capt FROM REGION_DATA
where POSTCODE = @postcode
go
这意味着我可以跑了
exec spGetCounty @postcode = 'rh12'
它返回一个区域,例如“东南”
是否可以在选择语句中包含这样的存储过程的结果。例如
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
有什么想法吗?
【问题讨论】:
你可以使用表值函数.. 查看***.com/questions/14506871/… 【参考方案1】:考虑使用标量函数,而不是存储过程:
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;
【讨论】:
你提到了returns INT
并且你返回了一个varchar
@HHH 。 . .谢谢你。 OP 没有指定类型,所以我不确定使用哪个。显然,我在中途改变了主意。【参考方案2】:
你需要创建一个函数
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
【讨论】:
【参考方案3】:不,您不能在 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
【讨论】:
【参考方案4】:通过参考以下链接使用视图或用户定义的功能
使用视图, 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
【讨论】:
以上是关于语法错误:在 select 语句中包含存储过程的结果的主要内容,如果未能解决你的问题,请参考以下文章
如何在 select 语句中包含 PERCENTILE_CONT 列,而不会生成有关 ORDER BY 子句或聚合函数的错误?
如何在 Java 中的 Prepared Select 语句中包含参数? [复制]
有没有办法在嵌套的 WITH 语句中包含 DELETE FROM 语句?