1.8 执行Transact-SQI语句
你可以使用下列几种方法执行Transact-SQL语句:
动态构造并执行Transact-SQL语句;
使用批组织语句一起执行;
使用脚本文件保存批语句,以供日后使用。
1.8.1 动态构造语句
你能够动态地构造Transact-SQL语句,在脚本执行的同时构造Transact-SQL语句。
为了动态地构造Transact-SQL语句,需要使用EXECUTE语句和一系列在运行时动态创建的字符和变量。
当你想使用运行时的变量时,动态地构造SQL语句会很有用。例如,你可以动态地创建语句,以用于对一系列的数据库对象进行类似的操作。
语法
EXECUTE ({@str_var┃’tsql string’}[{@str_var┃’tsql_string’}.])}
下面的例子演示了如何使用动态创建的语句,来指定一个不同与当前所使用的数据库内容,然后从一个指定的表中选中所有的行和列。这个例中,northwind数据库内容的改变只在查询的过程中有效。当前的数据库内容并没有改变。
通过使用存储过程,用户可以把数据库和表的信息以参数的形式传递给SQL语句,然后在数据库中,查询一个指定的表。
USE library
DECLARE @dbname varchar(30),@tablename varchar(30)
SET @dbname = ‘northwind’
SET @tablename = ’products’
EXECUTE
(,USE,+@dbname+ ‘SELECT productname FROM ’ + @tablename)
GO
运行结果:
productname
Chaj
Chang
Anise Syrup
下面的例子演示了如何动态地改变语句的执行时间,这是数据库选项之一。下面的语句并不返回受影响的行数。
USE northwind
EXECUTE{ ‘SET NOCOUNTON’+’SELECT lastname,reportsto FROM employees WHERE reportsto IS NULL’)
GO
运行结果:
Iastname reportsto
Fuller NULL’
1.8.2 使用批(Batches)
1、什么是批
批是一组Transact-SQL语句,它们被一同提交,且以组的方式被执行。批可以交互式地执行,或作为脚本的一部分而执行。一个脚本可能包含多于一个的Transact-SQL批。你可以在一个批中提交一个语句或同时提交多个语句
2、用GO语句定义一个批
在批的结尾处使用GO语句,代表这是一个批。GO并不是在任何地方都被当作Transact-SQL语句的;只有SQL Query Analyzer和osql工具接受这个语句。基于ODBC或ODBCAPI的应用程序在试图执行GO语句时,将会产生一个语法错误。
3、SQL Server如何处理批
SQL Server优化、编译并执行批中的语句。但是,这些语句被执行后,所做的改变不一定能够被恢复。
用户自定义变量的有效范围局限于一个批内部,因此在GO语句后,就不能在引用这个变量了。
注意:如果某个批内部有语法错误,则批中的所有其它语句都不能执行。此时将执行下一个批。
4、批中不能同时出现的语句
脚本中,由于对象创建语句的定义方式,创建某些对象的的语句必须有它们自己的批。我们通过一定的方式表示这些对象创建语句——即一个对象定义头,后面跟着AS关键字和一个或多个定义语句,以GO语句结束这个批。
下面的语句不能同时出现在一个批中:
CREATE PROCEDURE
CREATE VIEW
CREATE TRIGGER
CREATE RULE AS
CREATE DEFAULT
下面的例子中,如果这些语句在一个单独的批中执行,将会失败。因为这个查询中的某些语句不能出现在一个批中。为了使批能够正确地执行,必须在每个CREATE VIEW前插入GO语句。
CREATE DATABASE ...
CREATE TABLE ...
CREATE VIEW ...
CREATE VIEW ...
GO
下面的例子把前面的例子中的语句放入不同的批中,以使这些语句能够被正确地执行。
CREATE DATABASE ...
CREATE TABLE ...
GO
CREATE VIEW ...
GO
CREATE VIEW ...
GO
1.8.3 使用脚本
脚本是执行Transact-SQL语句的最常使用的方法之一。脚本是以文件方式保存的一个或多个Transact-SQL语句。
你可以使用SQL Query Analyzer,或诸如写字板之类的任何其他文本编辑器,编写并保存脚本。保存脚本文件时,使用.sql作为文件的扩展名。
当你想重新创建数据库或数据对象,或当你想重复执行某些语句时,把脚本保存起来会很有用。
在SQL Query Analyzer或osql中,你可以打开并执行脚本文件中的语句。