1. 变量概述
变量名是一个合法的标识符;T-SQL语言包括两种形式的变量:用户自定义的局部变量和系统提供的全局变量;
1.1 常规标识符
以 ASCII 字母、Unicode 字符、下划线(_)、@ 或 # 开头,后续可跟一个或若干个 ASCII 字符、Unicode 字符、下划线(_)、美元符号($),但不能全为下划线(_)、@ 或 #;
1.2.分隔标识符
包含在双引号(“ )或方括号([ ] )内的常规标识符或不符合常规标识符规则的标识符;
2. 局部变量
局部变量是一个能够拥有特定数据类型的对象,它的作用范围仅限在程序内部;局部变量是用于保存特定类型的单个数据值的变量; 在 T-SQL 语言中,局部变量必须先定义再使用;
2.1. 局部变量声明
在 T-SQL 语言中,用户能使用 DECLARE 语句 声明变量,包含局部变量; 在声明变量方面需要注意如下3个方面:
- 为变量指定名称,且名称的第一个字符必须为 @;
- 指定该变量的数据类型和长度;
- 默认情况下将该变量设置为
NULL ;
用户还能在一个 DECLARE 语句中声明多个变量,多个变量之间使用逗号分开; 语法格式如下:
DECLARE {@local_variable data_type} [ ,...n]
@local_variable :指定局部变量的名称;data_type :设置局部变量的数据类型大小;局部变量能为除 text、ntext、image 类型以外的任何数据类型;- 所有局部变量在声明后均初始化为 Null,可施一公 SELECT 或 SET 设定响应的值;
2.2 局部变量赋值
使用 SET 语句 为变量赋值,并使用 SELECT 语句 选择列表中当前所引用的值来为变量赋值; 语法格式如下:
SET @local_variable = expression
SELECT {@local_variable = expression} [,...n]
SELECT 语句 通常用于将单个值返回到变量中,若有多个值,并将返回的最后一个值赋给变量;- 若无返回行,则变量将保留当前值;
- 若
expression 不返回值,则变量设为 NULL; - 一个
SELECT 语句 能初始化多个局部变量;
2.3. 变量显示
使用 PRINT 语句 显示变量值,语法格式如下:
PRINT @local_variable
SELECT 语句 也能用于局部变量的查看,格式如下:
SELECT @local_variable
3. 全局变量
全局变量由系统提供且预先声明,是 SQL Server 系统内部使用的变量,其作用范围并不仅限于某一程序,而是任何程序均能随时调用,通常存储 SQL Server 的配置设定值和统计数据; 全局变量是由系统定义和维护的变量,是用于记录服务活动状态的一组数据;全局变量名由 @@ 符号开始;用户不能建立全局变量,也不能使用 SET 语句 去修改全局变量的值; 用户能在程序中用全局变量来测试系统的设定值或 T-SQL 命令之后的状态值; 全局变量的查看语句同局部变量:SELECT@@variable;
3.1 全局变量注意事项
使用全局变量时应注意:
- 全局变量不是由用户的程序定义的,而是在服务器级定义的;
- 用户只能使用预先定义的全局变量;
- 引用全局变量时,必须以标记符 “@@" 开头;
4.局部变量的名称不能与全局变量的名称相同,否则会在应用程序中出现不可预测的结果;
3.2 常用的全局变量
SQL Server 支持的全局变量主要包括以下6个:
@@CONNECTIONS :返回自最近一次启动 SQL Server 以来连接或视图连接的次数;@@ERROR :返回最后执行 SQL 语句的错误代码;@@ROWCOUNT :返回上一次语句影响的数据行的行数;@@SERVERNAME :返回运行 SQL Server 的本地服务器的名称;@@VERSION :返回 SQL Server 当前安装的日期、版本和处理器类型;@@LANGUAGE :返回当前 SQL Server 服务器的语言;
4. 注释符
注释是程序代码中不执行的文本字符串,用于对代码进行说明或暂时禁用正在进行判断的部分语句; 在 Microsoft SQL Server 系统中支持两种注释方式,即双连字符(-- )注释方式和正斜星号正斜杠星号字符对(/*···*/ )注释方式;
- 双连字符(
-- )注释方式主要用于在一行中对代码进行解释和描述; - 在正斜杠星号字符对(
/*···*/ )注释方式中,既能用于多行注释,又能与执行的代码处在同一行,甚至还能在可执行代码的内部; - 双连字符(
-- )注释和正斜杠星号字符对(/*···*/ )注释都没有注释长度的限制;一般地,行内注释采用双连字符,多行注释采用正斜杠星号字符对;
5. 运算符
运算符是一种符号,用来指定要在一个或多个表达式中执行的操作; SQL Server 使用的运算符有:算术运算符、赋值运算符、按位运算符、比较运算符、逻辑运算符、字符串串联运算符、一元运算符;
5.1 算术运算符
算术运算符在两个表达式上执行数学运算,这两个表达式可以是数字类型分类的任何数据类型; 算术运算符如下表: 注意: 加(+)和减(-)运算符也能用于对 datetime 及 smalldatetime 值执行算数运算符;
5.2 赋值运算符
T-SQL 语言有一个赋值运算符,即等号(=); 在下面的示例中创建了 @Teacher 变量,赋值运算符将 @Teacher 设置成一个由表达式返回的值;
DECLARE @Teacher INT
SET @Techer = 2
用户也能使用赋值运算符在列标题和为列定义的表达式之间建立关系;
5.3 按位运算符
按位运算符在两个表达式之间执行位操作,这两个表达式能为整形数据类型中的任何数据类型; 按位运算符如下表:
位运算符的操作数可以是整形或二进制字符串数据类型分类中的任何数据类型(但 image 数据类型除外); 此外,两个操作数不能同时是二进制字符串类型分类中的某种数据类型; 下表显示所支持的操作数数据类型;
5.4 比较运算符
比较运算符是 SQL 中常见的一类运算符,WHERE 子句后的大部分条件语句是由表达式和比较运算符组成的; 语法格式如下:
<表达式>比较运算符<表达式>
SQL 中常见的比较运算符如下表:
- 比较运算符的结果有布尔数据型,它有3种植:
TRUE、FALSE、UNKNOWN ;那些返回布尔数据类型的表达式被称为布尔表达式; - 与其他 SQL Server 数据类型不同,不能将布尔数据型指定为表列或变量的数据类型,也不能在结果中返回布尔数据类型;
- 当
SET ANSI_NULLS 为 ON 时,带一个或两个 NULL 表达式的运算符返回 UNKNOWN ;当 SET ANSI_NULLS 为 OFF,那么 NULL = NULL 就返回 TRUE;
在 WHERE 子句 中使用带有布尔数据类型的表达式能筛选出符合搜索条件的行,也能在流程控制语句中使用这种表达式;
5.5 字符串串联运算符
字符串串联运算符允许通过(+)进行字符串串联,这个加号也被称为字符串串联运算符;其他所有的字符串操作都能通过字符串函数进行处理; 默认情况下,对于 varchar 数据类型 的数据,在 INSERT 或赋值语句中,将空的字符串解释为空字符串; 在串联 varchar、char 或 text 数据类型的数据中,空的字符串被解释为空字符串; 例如: ’abc‘+‘’+’def‘ 存储为 ’abcdef‘;
5.6 一元运算符
一元运算符只对一个表达式执行操作,这个表达式可以是数字数据类型分类中的任何一种数据类型; +(正)、和 -(负)运算符能用于数字数据类型分类的任何数据类型的表达式; ~ (按位 NOT)运算符只能用于整形数据类型分类的任何数据类型的表达式; 一元运算符如下表:
5.7 运算符优先级
当一个复杂表达式有多个运算符时,运算符优先级决定执行运算的先后顺序; 执行顺序为从上而下、从左到右; 运算符优先级如下表:
6. 通配符
在 SQL 中,字符串数据类型之间的比较通常使用 LIKE 关键字,而 LIKE 通常与通配符搭配使用,能提高其使用效率; 通配符是指字符串数据类型中可用于代替其他任意字符的字符,在 SQL 中,常用的通配符有:“_”、“%”、“[ ]”、“[^]” 四种, 其作用和说明如下表:
在 SQL 中,使用最频繁的通配符是 "%" 和 “_" ;前者,可代替后者的使用,但在确定徐匹配的字符为一个的情况下,应选择 "_" ,因为通配符 "_" 的执行效率要高于通配符 "%" ;
|