T-SQL查询进阶--变量

数据库
变量对于一种语言是必不可少的一部分,当然,对于T-SQL来讲也是一样。在简单查询中,往往很少用到变量,但无论对于复杂的查询或存储过程中,变量都是必不可少的一部分.

概述

变量对于一种语言是必不可少的一部分,当然,对于T-SQL来讲也是一样。在简单查询中,往往很少用到变量,但无论对于复杂的查询或存储过程中,变量都是必不可少的一部分.

变量的种类

在T-SQL中,变量按生存范围可以分为全局变量(Global Variable)和局部变量(Local Variable).

1.全局变量是由系统定义的,在整个SQL SERVER实例内都能访问到的变量.全局变量以@@作为***个字符,用户只能访问,不能赋值。

2.局部变量由用户定义,生命周期只在一个批处理内有效。局部变量以@作为***个字符,由用户自己定义和赋值。

一个简单的例子如下

因为全局变量仅仅是用于读取系统的一些参数,具体每个全局变量所代表的含义请Google之…本文主要介绍局部变量(也就是用户自定义变量).

局部变量的用途

在T-SQL中,局部变量是一个存储指定数据类型单个值的对象.T-SQL中对变量的定义实际上和大多数高级语言一样.

局部变量在使用中常常用于以下三种用途:

1.在循环语句中记录循环的次数或者用于控制循环的次数.

2.用于存储流程语句来控制流程走向

3.储存存储过程或者函数的返回值

实际上,存储任何业务数据的局部变量都属于这一类应用.

#p#

局部变量的声明

局部变量的声明必须以"DECLEAR"作为关键字,变量的命名必须以"@"作为变量名的***个字符.必须为所声明的变量提供一个数据类型和数据长度.如:

局部变量的数据类型不能为Text,ntext,和Image类型,当对于字符型变量只提供数据类型没有提供数据长度时,数据长度默认为1.

一切只声明没有赋值的局部变量的初始值都为”NULL”.

局部变量的赋值

在T-SQL中,局部变量的赋值是通过”Set”关键字和”Select”关键字实现的.

实际上,使用Set或者是Select取决于下面几个因素

1.当对多个变量赋值时

SELECT关键字支持多个变量赋值,而SET关键字只支持一次对一个值赋值

2.当赋值时表达式返回值的个数

使用SET进行赋值时,当表达式返回多个值时,报错.而SELECT关键字在赋值表达式返回多个值时,取***一个.

比如,假设XXX表只有以下几条数据:

当使用SELECT关键字进行时,可以取返回值的***一个。

3.当表达式未返回值时

使用SET对局部变量赋值时,如果赋值表达式未返回值,则局部变量变为NULL,而SELECT对表达式赋值时,如果表达式未返回值,则局部变量保持原值.

4.当…你是一个标准爱好者时

坚决使用SET关键字对局部变量赋值吧,因为SET是ANSI标准……

5.当…你懒得记上述何时使用SET或是何时使用SELECT时

好吧,我承认我也很懒.那你按照一个简单的方式区别:当你的赋值语句需要引用一个数据源(表)时,使用SELECT.除此之外,使用SET.

#p#

局部表变量

局部表变量是一个特殊的局部变量.和临时表不同,局部表变量具有一切局部变量的特点.在查询中,因为局部表变量是存在内存中,而不是硬盘中,所以速度会远远快于临时表或是实际表,局部表变量最多的使用时在查询中充当多个表做连接时的中间表,比如:

这样会大大提高多表连接的查询速度.

总结

本文介绍了变量种类以及局部变量的使用范围,定义以及赋值方法.还简单介绍了表变量。在复杂查询中,系统的了解T-SQL的变量是写出好的查询语句必不可少的一部分。

 

原文链接:http://www.cnblogs.com/CareySon/archive/2011/10/11/2207330.html

【编辑推荐】

  1. 数据库点滴之SQL级联删除
  2. 数据库点滴之精妙SQL语句
  3. SQL点滴之性能优化其实没有那么神秘
  4. SQL点滴之几个有点偏的语句
  5. SQL点滴之如何编辑数据

 

 

责任编辑:艾婧 来源: CareySon的博客
相关推荐

2011-08-24 16:36:00

T-SQL

2011-07-18 14:38:44

子查询外部查询

2011-08-23 13:36:11

T-SQL查询流程控制语句

2010-07-20 13:52:27

SQL Server

2010-07-06 10:36:35

SQL Server

2010-10-19 16:06:26

SQL Server索

2023-08-15 08:26:34

SQL Server查找死锁

2017-04-21 11:24:13

数据库Azure T-SQL编辑器

2011-08-12 10:31:01

T-SQL查询基于列的逻辑表达式

2010-12-06 09:26:23

SQL Server

2009-05-06 17:31:17

SQL EnlightT-SQL分析器

2011-02-25 14:42:10

SQLwith关键字

2011-04-01 16:30:26

T-SQLDateTime

2010-07-19 13:22:45

SQL Server

2011-03-31 09:30:27

SQL Server数管理SQL

2010-07-13 10:35:20

SQL Server2

2011-07-08 13:40:18

2013-01-05 13:49:00

2011-04-01 15:53:20

T-SQLDateTime

2010-06-30 14:54:42

SQL Server
点赞
收藏

51CTO技术栈公众号