sql-server - sql存储过程为什么叫存储过程

标签 sql-server stored-procedures

几天前我被问到这个问题(tel intvw),我被抽空了。我说执行计划存储在服务器中,所以它称为存储过程。但我不确定我是否正确。

我之后的研究表明,SQL Server 内部有专门用于存储执行计划的计划缓存或过程缓存。在 that article还有对所谓的编译计划 stub 的引用。所以看起来是先创建编译计划 stub ,然后创建执行计划。

所以我想知道的是简要的

  • 创建存储过程时会发生哪些步骤?
  • 为什么存储过程称为存储过程 (如果问题有意义)?

  • 如果您可以将我推荐给现有的 SO 问题或其他文章,那也应该没问题。

    最佳答案

    Why is a Stored Procedure called stored procedure



    因为它是程序存储 在一个数据库中。

    在其他语言/环境中,通常不会存储可以执行的过程。它们以字节码或汇编程序编译。 IE。该程序不再以其原始文本形式存在。无法像在这些环境中创建时那样检索原始过程(尽管逆向工程可以检索该过程的本质)。

    当您在 SQL Server 中创建存储过程时,它完全以原始全文形式存储,相同的缩进、相同的大小写、相同的行,包括注释等等。您可以完整地检索用于创建存储过程的文本。

    Simplified explanation about executing a stored procedure



    当 SQL Server 想要执行一个存储过程时,它会首先检查缓存,看它是否已经被编译过。如果它在缓存中找到一个条目(以执行计划的形式),它将使用这个条目来执行。如果没有找到条目,它会将过程编译为执行计划,将其存储在缓存中以备后用,然后使用执行计划执行它。

    有些情况会强制重新编译存储过程,例如当执行计划缓存被清除(架构更改、统计更新等)或向编译器提供强制重新编译的命令时(存储过程 WITH RECOMPILE ,查询选项 OPTION(RECOMPILE) ,...)。

    关于sql-server - sql存储过程为什么叫存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35265691/

    相关文章:

    php - mysql存储过程出错

    sql - 你能从 SQL Server 2012 复制到 2008 R2

    sql - 如何防止 SQL Server 对扫描的行数进行平方?

    sql - 优化使用多个 SELECT 语句并返回一个结果集的 SQL 查询

    php - phpmyadmin 中的存储过程

    mysql - ID 的字符串分割并与 MySQL 中的名称连接

    sql-server - 使用 Delphi 的 CREATE/ALTER 过程

    asp.net - 如何使用 SQL Server 将 React Native 应用程序与 ASP.NET Web 服务连接?

    mysql - 如何在 phpMyAdmin (MySQL) 中编写 SP?

    mysql - 如何从 Rails 中的 MySQL 存储过程获取输出参数?