使用T_SQL 编写业务逻辑:
如何定义及使用“变量”:
---- 让电脑帮我记住一个名字(王二)
C#: string name ; 【定义一个变量】 name = "王二" ; 【变量赋值】 MessageBox.Show(name); 【输出】
|
T_SQL:(完全颠覆原有语法) declare @name varchar(20) 【定义一个变量】 set @name = '王二' 【变量赋值】 print @name 【输出】 |
注意:
1、当定义多个变量时,可以使用一个declare ,多个变量之间使用 “,”分割;
2、当需要给多个变量同时赋值时,可以使用“Select” 替换“set”;
3、以@开头是“自定义变量” ,以@@ 开头是“全局变量”(系统变量),全局变量用于公示系统内部运行过程中各种运行信息;
---- 用户不能定义及修改“全局变量”,是能读取!
常用全局变量:
@@ERROR------记录每次执行SQL语句后的结果,如果正常执行,结果为“0”,否则返回各种“错误号”
@@IDENTITY ----记录最后一次在“带有标示列”的表单插入数据后,所获得“自增长数据”
Select 字句的用法:
--1、用于进行数据表单【查询】
select loginPwd from [Admin]
--2、变量赋值【赋值】
declare @password varchar(50)
select @password = '99999'
--3、查询并赋值(确保只查询到一个值)【查询赋值】
declare @pwd varchar(50)
select @pwd = loginPwd from [Admin] where LoginId = '王二'
--4、输出结果集【拼接结果集】
select '王二' as StuName ,23 as StuAge,'男' as StuSex union
select '李丽',20,'女' union
select '赵军',23,'男'
注意:
1、结果集,可以不来自表单,而是通过Select直接拼接
2、select * from ,from后面可以不仅仅表名,也可以是一个“结果集”
使用set 与 Select 都可以进行变量赋值,但是有区别:
set |
select |
set一次只能给一个变量赋值 |
Select一次可以给多个变量赋值 |
set赋值时,得到超过一个结果时, 报错 |
select 赋值时,得到超过一个结果时, 自动保留最后一个值 |
set赋值出错时,原有数据丢失! |
select 赋值失败时,保留原有数据! |
如何将一个“结果集”保存下来?
------ 表变量、临时表
1、表变量
定义
declare @temptable Table(name varchar(20) ,age int ,sex nchar(1))
赋值
A:insert into @temptable values('王军',20,'男') ---- 单个赋值
B:insert into @temptable select查询语句 ---- 多个赋值
B_例子:
insert into @temptable select '王军',20,'男' union
insert into @temptable select '李军',20,'男'
取值
与普通表单的访问方式一致.
2、临时表
定义
create table #表名(......)
赋值
与普通表单操作一致
取值
与普通表单操作一致
表变量 |
临时表 |
语法: declare @变量名 Table(列定义) |
create Table #表名(列定义) |
工作原理: 数据存放在“内存中”; 只能定义后立刻使用(在一个Go之中),使用自动释放 |
数据保存在系统数据库tempdb中(磁盘上); 在用户的数据连接“断开前”,临时表将一直可以使用 |
使用场景: 少量结果集需要保存,且后续立刻使用 |
较大量的临时数据,需要保存时 |
使用“变量”,对数据使用,有什么影响?
--- 减低了编写SQL业务语句的难度!可以将原来一个SQL语句做的步骤,拆分成多个SQL语句去执行,而将它们之间的数据联系,使用“变量”来保存!
T_SQL语句也可以使用IF 、While进行逻辑分支、循环!
1、将原来的 “{” -----> begin
2、将原来的“}” -----> end
Case....End字句:
1、两对半;
Case <> End
When <> then
else(落单)
2、Case...end不能单独出现,必须“嵌入”查询或者赋值语句
3、When 后面,只能是为true或false的表达式
4、then 后面,数据类型统一
小贴士:
在T_SQL中的“+”,有两重含义:
1、当 “+”两边都是数字时,进行的“加运算”
2、当“+”两边都是字符时,进行的“字符连接”
3、当两边数据类型不一致时,需要进行类型转换
cast ( 变量 as 类型)
convert (类型 , 变量)
----- 区别:convert能够进行“输出格式”的设定,往往用于“时间类型”和“带小数的类型”