3.7.4 变量
变量是指在程序运行过程中其值可以发生改变的量,可以用于保存查询结果。Transact-SQL中提供了两种类型的变量:用户自己定义的局部变量和系统定义维护的全局变量。
(1)局部变量
局部变量是可以保存单个特定类型数据值的对象,其作用范围仅在声明它的批处理、存储过程、触发器等内部有效。在程序中通常用来储存从表中查询到的数据,或当程序执行过程中暂存变量使用。局部变量必须先用DECLARE语句声明后才可以使用,DECLARE语句的基本格式如下:
其中,
说明:
@local_variable:变量名称,必须以“@”开头,且符合标识符规则;
data_type:数据类型,可以是系统提供的或用户自己定义的数据类型;
=value:以内联方式为变量赋值。值可以是常量或表达式,但必须与变量声明类型匹配,或者可隐式转换为该类型;
@cursor_variable_name:cursor变量名称,必须以“@”开头,并符合标识符的规则;
CURSOR:指定变量是局部游标变量;
@table_variable_name:表类型的变量名称,必须以“@”开头,并符合标识符的规则;
<table_type_defination>:定义表数据类型,表声明包括列定义、名称、数据类型和约束,允许的约束类型只包括PRIMARY KEY、UNIQUE、NULL和CHECK;
<column_defination>|<table_constraint>:同CREATE TABLE中的<column_defination >|<table_constraint>。
局部变量声明后,如果声明过程中没有为其赋值,则默认初值是NULL。若要为变量赋值,可以使用SET语句,也可以使用SELECT语句。为变量赋值的SET和SELECT语句的基本格式如下:
说明:
@local_variable:已声明的局部变量的名称;
expression:任何有效的表达式,此参数可包含一个标量子查询。
【例3.78】 设有学生表Student,其各属性的数据类型见例3.8。
【例3.79】 声明一个表类型的变量。
(2)全局变量
全局变量是SQL Server系统提供的内部使用的变量,其作用范围并不局限于某一程序,而是任何程序均可随时调用。全局变量通常存储一些SQL Server的配置设定值和统计数据,用户可在程序中用全局变量来测试系统的设定值或Transact-SQL命令执行后的状态值。用户只能使用预先说明及定义的全局变量,而不能定义、修改全局变量。引用全局变量时,必须以“@@”开头。部分常用的全局变量见表3-13。
表3-13 部分常用的全局变量
【例3.80】 查看当前SQL Server的版本等信息及服务器名称。
SELECT@@VERSION AS版本信息,@@SERVERNAME服务器名称;
可能的查询结果为: