【问题标题】:Why stored procedure cannot be used with select, where & having为什么存储过程不能与 select、where 和 have 一起使用
【发布时间】:2017-09-03 14:00:23
【问题描述】:

为什么存储过程不能与SelectWhereHaving一起使用?

我知道函数可以达到目的 - 存储过程无法在 select 中执行的原因是什么?

博客回答您可以使用 UDF。了解我们可以使用 UDF 并且我们正在使用。 需要一个关于存储过程的正当理由。

【问题讨论】:

  • 你不应该把英文中的每个单词都大写......
  • 好的,先生,请记住
  • 这是语法和sql规范。 IMO,您的问题无效
  • 这是一个逻辑限制,真的。 SQL 是一种声明性语言,而存储过程(显然)是过程性的。如果你想在select 语句中调用一个存储过程,它应该去哪里?什么时候应该执行?每个输出行一次?每个语句一次? SQL 规范中没有任何内容对此进行定义。无论如何都不需要,因为大多数数据库反而在 SQL 之上放置了一个程序“层”——例如在 oracle 中,您有 PL/SQL,它是 SQL 之上的过程扩展。

标签: sql sql-server oracle sql-server-2008 sql-server-2005


【解决方案1】:

最大的原因很可能是过程可以返回任意数量的结果集并更改数据。它可以没有结果,也可以是 0 到 n 行的 100 个不同的结果集。它还可以取决于您的输入参数。存储过程也会影响基础数据,那么如果您使用一个存储过程来更改您在 where 子句中使用的同一个表中的数据,会发生什么情况?结果集甚至不需要列名称,因此您无法以任何方式引用它们。

那么,既然实现这样的程序真的很复杂,为什么可以在 where 等地方使用它们呢?你没有提供任何他们应该这样做的正当理由。

函数存在的原因是您可以将它们用于 where 子句等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多