【问题标题】:SQL Server: use select/where/having statements in a stored procedureSQL Server:在存储过程中使用 select/where/have 语句
【发布时间】:2020-05-16 01:48:06
【问题描述】:

我正在阅读这篇Click 的帖子,我意识到我们不能在SELECT / WHERE / HAVING 语句/子句中使用存储过程,但是我们可以在 UDF 中使用它们,那么为什么这个存储过程可以工作并返回数据?

我正在使用 select 并在此存储过程中使用:

create proc person_sp (@id int)
as
begin
    select id, [name], lastname 
    from person
    group by id, [name], lastname
    having sum(id) > 3
end

然后我打了电话

exec person_sp 1

【问题讨论】:

  • 您不能调用存储过程 from SELECT 查询。例如select * from person_sp 1 是非法的。但是您可以从 SELECT 查询中调用 UDF,例如 select * from personfunction(1) p
  • 您不能在查询中调用 SP,但您可以在 SP 中发出任何查询(注意颠倒的术语)。这就是问题所在吗?
  • “我正在使用 select 并在这个 sp 中拥有?”这是一个问题???如果是,那么实际的问题是什么?
  • @Eric 我的意思是如果我们不能在 Sp 中使用 SELECT/WHERE/HAVING 语句,那么为什么在我的代码中我可以使用 have 而我没有收到错误?
  • 谁说你不能在 sp 中使用 SELECT/WHERE/HAVING?

标签: sql-server stored-procedures


【解决方案1】:

评论太长了,所以放在这里。在链接中,它显示“我们不能在 SELECT/WHERE/HAVING 语句中使用 SP。” 这意味着您不能在您的 select/where/have 语句中调用 sp。 下面的语句会出错。

select id, [name], lastname, exec person_sp 1
from person
where sp_another > 2
group by id, [name], lastname
having sum(id) > 3

【讨论】:

    猜你喜欢
    • 2010-12-24
    • 1970-01-01
    • 2014-01-24
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 2011-03-16
    相关资源
    最近更新 更多