Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
批处理与SQL语句_Sql_Sql Server_Tsql - Fatal编程技术网

批处理与SQL语句

批处理与SQL语句,sql,sql-server,tsql,Sql,Sql Server,Tsql,(a) SQL语句是单个SQL命令(例如,从表1中选择*或将NOCOUNT设置为ON)。另一方面,批处理是发送到服务器以作为一个整体执行的许多SQL语句。批处理中的语句被编译成单个执行计划。批次由GO命令分隔 所以SQL语句和批处理之间的唯一区别是,每个SQL语句作为一个单独的单元发送到服务器,因此与其他SQL语句分开编译,而批处理中的SQL语句一起编译 b) 我假设存储过程和批处理之间的一个主要区别是存储过程是预编译的,而批处理不是 thanxa。仅当每个SQL语句单独运行时(例如在SSMS中

(a)

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

所以SQL语句和批处理之间的唯一区别是,每个SQL语句作为一个单独的单元发送到服务器,因此与其他SQL语句分开编译,而批处理中的SQL语句一起编译

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


thanx

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

即使不涉及GO,也始终有两条语句=“一批”。GO只告诉SSMS之类的工具分解提交给引擎的数据

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

评论后编辑:

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

  • 批处理至少由一个字符的文本/一条语句组成(但可以是2条、20条或20000条语句)
  • GO告诉SQL工具在何处将“文本块”/“语句集合”分解为单独的DB引擎调用(=批处理)

“a.仅当每个SQL语句单独运行时(例如在SSMS中或在客户端上)。”假设我单击Microsoft SQL Server Management Studio-->新建查询选项卡(打开一个新的查询窗口),并在此查询窗口中输入一条SQL语句,则该语句将被视为常规SQL语句。但是,如果我输入两条语句,那么我们将有一个批处理?只是100%像你说的那样:通过Microsoft SQL Server Management Studio的查询窗口发送到DB engine的单个SQL语句也会在批处理中发送(因此此批处理只包含一条语句)?废话,我试图给你另一个观点,但我却否决了你,我apologize@AspOnMyNet:谢谢。你现在可以再次投票了,我做了一个小调edit@AspOnMyNet:在回答“只是100%照你说的做”时:是的