T-SQL 变量
T-SQL变量
变量的种类:
在T-SQL中,变量按生存范围可以分为全局变量(Global Variable)和局部变量(Local Variable)
1、全局变量是由系统定义的,在整个SQL Server实例内都能访问到的变量,全部变量以@@开头,用户只能访问,不能赋值。
2、局部变量由用户定义,生命周期只在一个批处理内有效。局部变量以@作为第一个字符,由用户自己定义和复制。
示例:
DECLARE @i int --声明一个int类型局部变量
SET @i = 10 --通过SET对局部变量进行赋值 DECLARE @Name nvarchar(20) --声明一个nvarchar(20)类型变量
SET @Name = '张飞' PRINT @@VERSION --全部变量,只能读取,不能赋值
SET @@VERSION = '' --此行代码报错
局部变量的用途:
- 在循环中记录循环次数
 - 储存存储过程或者函数的返回值
 
局部变量的声明:
  局部变量的声明必须以"DECLARE"作为关键字,变量的命名必须以"@"作为变量名的第一个字符.必须为所声明的变量提供一个数据类型和数据长度。
	  如:
DECLARE @Name nvarchar(20)
注意:局部变量的数据类型不能为Text,ntext,和Image类型,当对于字符型变量只提供数据类型没有提供数据长度时,数据长度默认为1.
设置变量中的值:
1、使用SET设置变量
有两种设置变量值方法。可以使用SELECE语句或者SET语句。从功能上看,它们的作用几乎是相同的,不同的是SELECT语句允许元数据值来自SELECT语句中的某一列。
DECLARE @i int,@j int
set @i = 10;
set @j = 20;
select @i + @j
用查询到的值设置变量:
DECLARE @i int
SET @i = (select MAX(Age) from Person) --当使用SET时如果返回结果有多行也会报错。同时如果返回多条记录也报错
SELECT @i
2、使用SELECT设置变量:
当变量中存储的信息来源于查询时,经常使用SELECT给变量赋值,语法比较简便。
DECLARE @i int
SELECT @i = 100
SELECT @i
查询的信息为变量赋值:
DECLARE @i int
SELECT @i = Age from Person_1 order by Id desc --当返回多个值时用最后一个赋值
PRINT @i
SELECT同时设置多个值:
DECLARE @Name varchar(20)
DECLARE @i int
SELECT @i = 10, @Name = '张飞'
3、当表达式未返回值时
- 使用SET对局部变量赋值时,如果赋值表达式未返回值,则局部变量变为NULL,而SELECT对表达式赋值时,如果表达式未返回值,则局部变量保持原值。
 - 一切只声明没有赋值的局部变量的初始值都为”NULL”。
 
例如:
DECLARE @Name nvarchar(50)
SET @Name = '黄飞鸿'
select @Name = Name from Person_1 where Id = 100 --100不存在记录,此处如果改为一个Id存在的,且Name列不为null的值,则@Name变量的值就变了
PRINT @Name --依然打印的是黄飞鸿
可见,当SELECT表达式赋值时,如果为返回值,则保持原值。
局部表变量:
局部表变量是一个特殊的局部变量.和临时表不同,局部表变量具有一切局部变量的特点.在查询中,因为局部表变量是存在内存中,而不是硬盘中,所以速度会远远快于临时表或是实际表,局部表变量最多的使用时在查询中充当多个表做连接时的中间表。
DECLARE @TempTable TABLE --声明一个局部表变量
(
Id int,
Name nvarchar(50)
)
INSERT INTO @TempTable --用查询到的作为数据插入到局部表变量
SELECT Id,Name FROM Person_1 SELECT * FROM @TempTable --和普通表一样用,可以各种join,子查询等等。
T-SQL 变量的更多相关文章
- PL/SQL变量的作用域和可见性
		
变量的作用域和可见性设计变量在块中的位置,不同的位置使得变量具有不同的有效性与可访问性. 变量的作用域是指可以使用变量的程序单元部分,可以是包和子程序包等. 当一个变量在它的作用域中可以用一个不限定的 ...
 - PL/SQL变量和类型
		
变量 在定义变量时一定要为其指定一个类型,类型可以是PL/SQL类型或SQL语言的类型,一旦变量的类型确定,那么变量中所能存储的值也就确定了,因此尽管变量的值会经常改变,但是值的类型是不可以变化的. ...
 - 【SQL】小心在循环中声明变量——浅析SQL变量作用域
		
本文适用:T-SQL(SQL Server) 先看这个语句: --跑3圈 BEGIN --每圈都定义一个表变量,并插入一行 DECLARE @t TABLE(Col INT PRIMARY KEY) ...
 - TOP字句加SQL变量的相关问题
		
SQL Server数据库中的变量可以加载TOP字句之后,下文将对TOP字句加SQL变量的相关问题进行讨论,供您参考,希望对您学习SQL数据库有所帮助. SQL Server2005开始,TOP子句后 ...
 - SQL变量、运算符、分支、循环语句
		
变量: SQL语言也跟其他编程语言一样,拥有变量.分支.循环等控制语句. 在SQL语言里面把变量分为局部变量和全局变量,全局变量又称系统变量. 局部变量: 使用declare关键字给变量声明,语法非常 ...
 - SQL.变量、运算符、if、while
		
变量: SQL语言也跟其他编程语言一样,拥有变量.分支.循环等控制语句. 在SQL语言里面把变量分为局部变量和全局变量,全局变量又称系统变量. 局部变量: 使用declare关键字给变量声明,语法非常 ...
 - pl sql 变量的声明和赋值
		
链接地址:http://www.cnblogs.com/zhengcheng/p/4168670.html 一.什么是PL-SQL PL-SQL是结合了Oracle过程语言和结构化查询语言(SQL)的 ...
 - oracle 触发器number判断空值,:NEW赋值,for each row,sql变量引号,to_date,to_char
		
1.number类型在库中可能存在null这种数据 判断是否为空时要用如下: IF(nvl(:NEW.BACAH,0) <>0) 不能用IF(BACAH IS NOT NULL) 2. 2 ...
 - 二十四、oracle pl/sql 变量
		
一.变量介绍在编写pl/sql程序时,可以定义变量和常量:在pl/sql程序中包括有:1).标量类型(scalar)2).复合类型(composite) --用于操作单条记录3).参照类型(refer ...
 - oracle pl/sql 变量
		
一.变量介绍在编写pl/sql程序时,可以定义变量和常量:在pl/sql程序中包括有:1).标量类型(scalar)2).复合类型(composite) --用于操作单条记录3).参照类型(refer ...
 
随机推荐
- Regex count lowercase letters
			
Description: Your task is simply to count the total number of lowercase letters in a string. Example ...
 - sdut2164Binomial Coeffcients(组合数求模)
			
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2164 贴一篇写组合数求mod比较好的帖子 这里 ...
 - List排序的两种简便方式
			
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace List ...
 - asp.net,CSS设置<TableListView>的title居左,居左,居上
			
居左 DIV.TableTitleStyle TABLE.grid TH { text-align:left; } 引用 <div class="TableTitleStyle&quo ...
 - [Warning] TIMESTAMP with implicit DEFAULT value is deprecated
			
As indicated by the warning, to turn off the nonstandard behaviors, enable the new explicit_defaults ...
 - android 自定义控件中获取属性的三种方式(转)
			
第一种方法,直接设置属性值,通过attrs.getAttributeResourceValue拿到这个属性值. (1)在xml文件中设置属性值 <com.example.activity.Ico ...
 - ORACLE CONTROL FILE 笔记
			
控制文件包含的信息: 1.数据库的名字 2.联机重做日志文件和数据文件的名字和位置 3.数据库创建的时间戳 4.当前日志的序列号 5.检查点信息 6.备份信息 TIP:数据 ...
 - php redis扩展
			
安装redis扩展,一定要弄清楚自己的php版本 echo phpinfo(); 查看php信息. 页面搜索Compiler,可以获取自己的VC版本
 - 恢复SD卡错删数据
			
对于众多米粉来说,手机里存储的很多资料都非常宝贵,如果不小心删除了,想要重新收集这些资料就显得非常困难.有道是千金易得,数据无价,特别是一些珍贵照片之类的充满回忆的数据,丢失了甚至会抱憾 ...
 - ArcGIS Engine 捕捉
			
原文 ArcGIS Engine 捕捉 bool bCreateElement = true; ;//时间间隔 ;//初始值 IElement m_element = null; //界面绘制点元素 ...