使用存储过程的结果作为 SELECT 语句中的列[重复]

Posted

技术标签:

【中文标题】使用存储过程的结果作为 SELECT 语句中的列[重复]【英文标题】:Use the result of Stored Procedure as column in SELECT statement [duplicate] 【发布时间】:2018-10-08 07:25:17 【问题描述】:

我有一个示例存储过程:

dbo.spSampleProcedure
 @ID INT,
 @Country VARCHAR(50)

此 SP 将返回一个 MONEY 值(仅限 1 列)。

现在我想这样实现:

 SELECT 
    c.ID,
    Amount = EXEC spSampleProcedure @ID = c.ID, @Country = c.Country
 FROM Customer c

这可能吗?

【问题讨论】:

你试过了吗? 你要找的是user defined function @PeterSmith 令人惊讶的是,它不起作用:( @AsRa 你的意思是把 sp 转换成函数吗? 见here 【参考方案1】:

您应该考虑使用 sp_ 作为前缀来命名您的存储过程。那是系统保留的前缀,它可能会导致性能问题。您可以在 Aaron Bertrand 的 this article 上阅读更多相关信息。

为了满足您的需求,您可以首先创建一个用户定义的函数(如 cmets 中所提到的),该函数将执行以下操作:

create function myfunc(@Id int, @Country varchar(50))
returns money
as
begin

declare @amount money 

select @amount = amount
from Customer 
where Id = @Id and Country = @Country

return @amount
end

只有这样你才能尝试你想做的事情:

select  c.id,
        amount = dbo.myfunc (c.id, c.country)
from customer c

【讨论】:

谢谢!现在我知道存储过程方式是不可能的,因为我想使用 SP 进行维护和重用。

以上是关于使用存储过程的结果作为 SELECT 语句中的列[重复]的主要内容,如果未能解决你的问题,请参考以下文章

SQL 语句的解析过程

phpMyAdmin - SELECT 语句在存储过程中的结果未显示

存储过程中的 MySQL select 语句返回的结果与 proc 外部不同

数据库中的视图的使用与存储过程

如何检测 SELECT 中的列是不是可以为空?

如何评估雪花存储过程中的语句