3.7.4 变量

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服务器名称;

可能的查询结果为: