3.3.3 批处理和脚本
批处理是同时从应用程序发送到SQL Server并得以执行的一组单条或多条T-SQL语句。这些语句为了达到一个整体的目标而同时执行。GO命令表示批处理的结束。如果T-SQL脚本中没有GO命令,那么它将被作为单个批处理来执行。
SQL Server将批处理中的语句作为一个整体,编译为一个执行计划,因此批处理中的语句是一起提交给服务器的,所以可以节省系统开销。
批处理中的语句如果在编译时出现错误,则不能产生执行计划,批处理中的任何一个语句都不会执行。批处理运行时出现错误将有如下影响:
• 大多数运行时错误将停止执行批处理中当前语句和它之后的语句。
• 某些运行时错误(如违反约束)仅停止执行当前语句,而继续执行批处理中其他所有语句。
• 在遇到运行时错误的语句之前执行的语句不受影响。唯一例外的情况是批处理位于事务中并且错误导致事务回滚。在这种情况下,所有在运行时错误之前执行的未提交数据修改都将回滚。
批处理使用时有如下限制规则:
• CREATE DEFAULT、CREATE FUNCTION、CREATE PROCEDURE、CREATE RULE、CREATE SCHEMA、CREATE TRIGGER和CREATE VIEW语句不能在批处理中与其他语句组合使用。批处理必须以CREATE语句开始。所有跟在该批处理后的其他语句将被解释为第一个CREATE语句定义的一部分。
• 不能在同一个批处理中更改表,然后引用新列。
• 如果EXECUTE语句是批处理中的第一句,则不需要EXECUTE关键字。如果EXECUTE语句不是批处理中的第一条语句,则需要EXECUTE关键字。
脚本是存储在文件中的一系列T-SQL语句。T-SQL脚本包含一个或多个批处理。T-SQL脚本主要有以下用途:
• 在服务器上保存用来创建和填充数据库的步骤的永久副本,作为一种备份机制。
• 必要时将语句从一台计算机传输到另一台计算机。
• 通过让新员工发现代码中的问题、了解代码或更改代码,从而快速对其进行培训。
脚本可以看作一个单元,以文本文件的形式存储在系统中。在脚本中,可以使用系统函数和局部变量。例如,某个脚本中包含了如下代码:
该脚本中使用了6条语句,分别包含了USE语句、局部变量的定义、CREATE语句、INSERT语句、SELECT语句以及SET赋值语句,所有的这些语句在一起完成了person数据表的创建、插入数据并统计插入的记录总数的工作。
USE语句用来设置当前使用的数据库,可以看到,因为使用了USE语句,所以在执行INSERT和SELECT语句时,它们将在指定的数据库(test_db)中进行操作。