【问题标题】:Batch vs SQL statement批处理与 SQL 语句
【发布时间】:2010-04-28 18:51:42
【问题描述】:

一)

SQL 语句是单个 SQL 命令(例如,SELECT * FROM table1 或 SET NOCOUNT ON)。另一方面,批处理是发送到服务器以作为一个整体执行的多个 SQL 语句。批处理中的语句被编译成单个执行计划。批次由 GO 命令分隔

那么 SQL 语句和 Batch 唯一的区别是每个 SQL 语句作为一个单独的单元发送到服务器,因此与其他 SQL 语句分开编译,而 Batch 中的 SQL 语句是一起编译的?

b) 我假设存储过程和批处理之间的主要区别之一是存储过程是预编译的,而批处理不是?

感谢

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    一个。仅当每个 SQL 语句都单独运行时(例如在 SSMS 中或在客户端上)。

    即使不涉及 GO,也始终有两个语句 =“一个批处理”。 GO 只是告诉像 SSMS 这样的工具来分解提交给引擎的文件。

    b.不完全正确。存储过程是预先解析的,但在调用之前不会编译到执行计划中,并且已经不在计划缓存中。一个批次被一次性解析和编译,并可能生成一个可重用的计划。

    评论后编辑:

    • 术语“语句”和“批处理”是两个不同的概念
    • 发送到数据库引擎的任何文本都是批处理
    • 文本字面意思是:客户端工具不进行任何处理:仅将文本发送到数据库引擎
    • 文本由 SQL 语句组成

    所以

    • 一个批次至少包含一个文本字符/一个语句(但可以是 2、20 或 20,000 个语句)
    • GO 告诉 SQL 工具在何处将“文本块”/“语句集合”分解为单独的数据库引擎调用(= 批处理)

    【讨论】:

    • "a. 仅当每个 SQL 语句单独运行时(例如在 SSMS 或客户端上)。"假设我单击 Microsoft SQL Server Management Studio --> New Query 选项卡(打开一个新的查询窗口 ),并在该查询窗口中输入一条 SQL 语句,则该语句将被视为常规 SQL 语句。但是如果我输入两个语句,那么我们将有一个批处理?
    • 只是 100% 你在说什么:通过 Microsoft SQL Server Management Studio 的查询窗口发送到数据库引擎的单个 SQL 语句也在批处理中发送(因此这个批处理只包含一个语句)?
    • 废话,我试图再给你一个观点,但我对你投了反对票。我道歉
    • @AspOnMyNet:谢谢。你现在可以再次投票了,我做了一个小修改
    • @AspOnMyNet:回复“100% 你所说的……”:是的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 2015-10-25
    • 2022-01-11
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多