T_SQL编程
Transact-SQL语言是SQL Server为用户提供的一种编程语言,是对标准SQL的实现和扩展,它具有标准SQL的主要特点,
同时增加了变量、运算符、函数和流程控制等语言元素,使得其功能更加强大。
1.批处理,什么是批处理
所谓 "批" 是从客户机传递到服务器上的一组完整的数据的sql指令。
作用:
只是通知查询分析器有多少语句包含在当前批,查询分析器将两个Go之间的语句组成一个字符串交给服务器去执行。
当前的批处理语句出现错误不会影响下一个批处理
2.sql 中的变量
变量的声明:
declare 变量名 数据类型 [,变量名 数据类型]
注意:变量名前必须加@符号
变量的赋值:
单个赋值:set 变量名=值
多个赋值:select 变量名=值 [,变量名 =值]
将查询出的结果赋值:select 变量名=列名1 [,变量名 =列名..] from 表名 [ where .....]
常用的系统变量(全局变量):
@@ERROR:返回执行上一条T-sql 语句所返回的错误号
@@IDENTITY:返回最近一次插入的identity列的值
@@PROCID:返回当前存储过程的Id标识
@@REMSERVER:返回在登录记录中记载远程SQL server服务器的名字
@@SPID:返回当前服务器进程的Id标识
@@TRANCOUNT:返回当前连接中,处于活动状态事务的数目
@@VERSION:返回当前SQL server服务器的安装日期、版本、处理器类型
@@TOTAL_ERRORS:返回自SQLServer服务器启动后,所遇到的读写总数
@@ROWCOUNT:返回上一条SQL语句所影响到数据行的数目
注意:系统变量是只读的,不能进行修改或赋值操作,一般是将系统变量赋值给局部变量(也就是我们自定的变量)来使用的
3.控制流程语句
1. IF...ELSE条件判断语句
语法格式:
IF 判断的条件
表达式|SQL1语句
ELSE
表达式|SQL2
例如,根据学号来判断student数据库的考试成绩(Exam)是否有记录
Declare @stuNo varchar(30) set @stuNo ='135147' IF (SELECT COUNT(*) FROM Exam where stuNo=@stuNo)=0 begin PRINT ('学号为'+@stuNo+'学员没有考试成绩记录') end Else begin PRINT ('学号为'+@stuNo+'学员参加了考试,有成绩记录') end
**PRINT:是在屏幕上显示输出的信息,beggin - end 相当于其他语言里面的{ }(用于执行多个表达式语句)
2. CASE 语句
(1)简单表达式
CASE 表达式
WHEN 与条件比较的值 THEN 表达式
[WHEN ...N.... THEN .... ]
[ELSE 条件都不成立时要执行的表达式]
END
eg:
SELECT stuNo 学号 ,stuName 姓名,stuAge, 年龄, case stuSex when '男' then '先生' when '女' then '女士' else '未知' end '称呼'
from Persons
(2)选择表达式
CASE
WHEN 比较的表达式 THEN 表达式
[WHEN ..N ... THEN ... ]
[ELSE 条件都不成立时要执行的表达式]
END
如果比较的表达式为true ,就执行THEN 里面的表达式
eg:
select examno 考号,stuno 学号,score 分数 , case when score<60 then 'D' when score<70 then 'C' when score<80 then 'B' when score<90 then 'A' end '等级' from Exam
3.WHILE循环语句
语法:
WHILE 表达式
Begin
//T-sql语句
【BREAK】
【CONTINUE】
End
当表达式的结果为真时,服务器加将重复执行该循环里面的T-sql语句
【BREAK】的作用就是无条件的结束该循环,并开始执行紧跟着End后面的语句。
【CONTINUE】的作用就是跳过本次循环,开始执行下一次循环。
eg:将不及格的笔试分数提升到2分,并在存在的最低分不低于60分的情况下,跳出循环
1 declare @score float 2 3 set @score=0 4 5 while exists (select * from Exam where score<60) 6 7 begin 8 9 update Exam set score+=2 where score<60 10 11 select @score=MIN(score) from Exam 12 13 if @score<60 14 15 continue 16 17 else 18 19 break; 20 21 end
4.函数
1.数学函数
ABS(数值表达式) :求绝对值,返回数值类型表达式的绝对值 例如: select ABS(-45.3)
ASCII(字符型表达式):求ASCII码函数,返回该字符对应的ASCII数字 例如: select ASCII('h')
AVG([ALL|DISTINCT]表达式) :求平均值 例如:select AVG(score) from Exam
COUNT([ALL|DISTINCT]表达式|*) 统计数量 例如: select count(*) from Exam
CEILING(数值型表达式):上舍。返回最小的大于或等于给定数值型表达式的整数值。
FLOOR(数值型表达式):下舍。返回最大的小于或等于给定数值表达式的整数值。
POWER(数值型表达式1,数值型表达式2):乘方运算函数。进行乘方运算,POWER(2,3)表示2的3次方。
PI():求圆周率。不使用参数
SQRT
ROUND(数值型表达式,整数):四舍五入,将数值表达式四舍五入成整数指定精度的形式。
RAND (整型表达式):产生随机数。返回一个0和1之间的随机数。
2.字符串函数
---转发至:https://www.cnblogs.com/ruhaoren/p/12758965.html
SELECT ASCII('ABC');--计算字符串第一个字符的ASCII值 SELECT CHAR(65);--把给定ASCII编码转换成字符 SELECT LOWER('AbC');--全转换为小写 SELECT UPPER('aBc');--全转换为大写 SELECT LTRIM(' AAA');--去掉左边的空格 SELECT RTRIM('AAA ');--去掉右边的空格 SELECT LEN(' ABC ');--计算字符个数,不包含后面的空格 SELECT LEFT('ABCDEFG',3);--从左边返回指定个数的字符 SELECT RIGHT('ABCDEFG',3);--从右边返回指定个数的字符 SELECT SUBSTRING('ABCDEFG',3,2);--从第三个字符开始返回2个字符 SELECT CHARINDEX('A', 'CCBBAA'); --返回第一个参数字符串在指定字符串中的位置 SELECT REPLACE('AABBCC','A','D'); --用第三个参数替换第一个参数中的第二个参数所指定字符串
3.日期函数
select GETDATE() --获取当前系统时间 select DATENAME(YEAR,GETDATE()) --返回日期年份部分 select DATEADD(DAY,1,GETDATE()) --返回在日期天数部分加一的日期 select DATEDIFF(YEAR,'2000-1-1',GETDATE()) --返回两个日期年份的差值 select DAY(GETDATE()) --返回天数部分 select MONTH(GETDATE()) --返回月份 select YEAR(GETDATE()) --返回年份