1
数据库技术及应用
1.9.1.1 6.1.1 批处理定义
6.1.1 批处理定义

批处理是同时从应用程序发送到SQL Server并得以执行的一组单条或多条SQL语句。SQL Server将批处理的语句编译为单个可执行单元,称为执行计划。执行计划中的语句每次执行一条。批处理的种类较多,如存储过程、触发器、函数内的所有语句都可构成批处理。

1.使用批处理的优点

在数据库应用的客户端适当使用批处理具有以下优点。

(1)减少数据库服务器与客户端之间的数据传输次数,消除过多的网络流量。

(2)减少数据库服务器与客户端之间传输的数据量。

(3)缩短完成逻辑任务所需的时间,提高代码的可复用度。

2.批处理的执行

批处理以GO命令作为结束信号,当前批处理语句由上一GO命令后输入的所有语句组成,如果是第一条GO命令,则由特殊会话或脚本开始后输入的所有语句组成。GO命令和SQL语句不能在同一行中,但在GO命令行中可包含注释。

只要批处理中的语句没有任何语法错误,就可以经过编译建立执行计划。假定在一个批处理中有10条语句。如果第5条语句有一个语法错误,则不能为该批处理建立执行计划,不执行批处理中的任何语句。批处理在执行过程中可能会发生一些运行时的错误,诸如算术溢出或约束冲突之类的运行时错误具有下面的影响:

●大多数运行时错误将停止执行批处理中当前语句和它之后的语句。

●某些运行时错误(如违反约束)仅停止执行当前语句,而继续执行批处理中其他所有语句。

在遇到运行时错误的语句之前执行的语句不受影响。唯一例外的情况是批处理位于事务中并且错误导致事务回滚。在这种情况下,所有在运行时错误之前执行的未提交数据修改都将回滚。

【例6-1】不能建立执行计划的批处理。

批处理中存在语法错误,不能建立执行计划,其中master是SQL Server自带的数据库。

【例6-2】批处理执行过程中发生的运行时错误。

例6-2中的代码没有语法错误,可以建立执行计划。在执行过程中,由于第3个INSERT语句产生主键重复的错误,因此该语句停止执行,继续执行第4个INSERT语句。SELECT语句返回3个行,如图6-1和图6-2所示。

图6-1 运行时错误显示“结果”

图6-2 运行时错误显示“消息”

3.编写批处理的规则

在编写批处理时,应注意以下几点:

●不能在同一个批处理中更改表,然后引用新列。

●不能在定义一个CHECK约束后,立即在同一个批处理中使用该约束。

●CREATEDEFAULT、CREATEFUNCTION、CREATEPROCEDURE、CREATE RULE、CREATETRIGGER和CREATEVIEW语句,在一个批处理中只能提交一个。

●批处理必须以CREATE语句开始。所有跟在该批处理后的其他语句将被解释为第一个CREATE语句定义的一部分。

●如果EXECUTE语句(执行存储过程的语句)是批处理中的第一句,则不需要EXECUTE关键字。如果EXECUTE语句不是批处理中的第一条语句,则需要EXECUTE关键字。