1.批处理的过程
批是一组SQL语句的集合,一个批以批处理结束符号GO结束。
一个批处理中的语句被一次提交给SQL Server,SQL Server将这些语句编译为一个执行单元,称作SQL Server执行计划。
GO不是SQL语句。它是在某些客户端工具中使用的符号,客户端工具将它解释为:最后一个GO上面的所有内容都应该一起发送到服务器来执行。
例如,下面例子中的注释符号并没有起到预先的目的。原因是客户端工具并没有解释任何SQL语句,它只是将语句分解成多个批,按批发送到服务器去处理。
SELECT * FROM authors
/*/下面/*和*/之间的语句都希望注释掉/
  GO
SELECT * FROM sales
GO
SELECT * FROM publishers
GO
*/

SELECT * FROM titles
GO
如果在一个包含批处理结束符GO命令的SQL语句集合中,要想注释一些语句,应该在每个GO的前面使用另外一种注释标记符:如两个短划线 (也可以用其它字符代替两个短划线)。上例中的应改为:
SELECT * FROM authors
/*/下面/*和*/之间的语句都希望注释掉/
  --GO
SELECT * FROM sales
--GO
SELECT * FROM publishers
--GO

  */
SELECT * FROM titles
GO
在执行批处理时,如果其中任一个SQL语句存在语法错误,SQL Server将取消批中所有语句的执行。例如,由下列两个语句组成的批:
SELECT * FROM sales
SELECT * FRO titleauthor
GO
在上例中,第一个语句是正确的,第二个语句存在语法错误,但由于这两个语句是在一个批中,第一个语句不会被执行,执行这个批的结果是返回一个错误信息。

 2.建立批时应注意的事项
(1) CREATE VIEW、CREATE RULE、CREATE DEFAULT、CREATE TRIGGER、CREATE PROCEDURE语句应在批中单独提交,它们不能与其它SQL语句一起构成一个批。
(2) 使用ALTER TABLE语句修改表结构后,不能在同一个批中参照新定义列。
(3) EXEC[UTE]语句为批中第一个语句时,EXEC[UTE]关键字可以省略。否则,必须使用该关键字。

 3.批和事务的区别
(1) 批是一个客户端的基本概念,它控制多个语句如何发送到SQL Server以便立即处理,而事务是一个服务器端的概念,是SQL Server执行SQL语句的基本工作单元。
(2) 批语句的组合发生在编译时刻,而事务中语句的组合发生在执行时刻。在编译时,如果批中某个语句存在语法错误,SQL Server将取消这个批中所有语句的执行。在执行时刻,如果事务中某个数据修改操作违犯约束、规则、触发器等条件时,SQL Server将回滚整个事务。
  (3)在一个批中可以包含多个事务,在一个事务中也可以包含多个批。
  例1,下面的例子是一个事务,它由四个批处理组成:
BEGIN TRANINSERT
  INSERT authors VALUES (...)
GO
SELECT * FROM authors
GO
UPDATE publishers SET pub_id = (...)
GO
SELECT * FROM publishers
GO
COMMIT TRAN

例2,下面的例子是一个批处理,它由两个事务组成:
BEGIN TRANINSERT
  INSERT authors VALUES (...)
SELECT * FROM authors
COMMIT TRAN
BEGIN TRAN
UPDATE publishers SET pub_id = ...
INSERT publishers VALUES (...)
COMMIT TRAN

GO