#T-SQL编程基础
##1.变量
t-sql的变量包括:系统变量、用户自定义变量
1.系统变量
为了方便t-sql系统运行而生的变量,用户不能修改,以@@+name的形
式出现,比如:@@fetch_status。系统变量的作用域是全局的,在整
个会话层(用户连接到数据库到断开连接)都是有效的。
2.用户自定义变量
为方便用户自己定义处理语句,用户可以自定义变量
语法:declare @name datatype
比如定义一个名为student_name的char(10)类型变量:declare
@student_name char(10),用户自定义的变量的作用域为用户定义
的批处理语句中,在用户定义的过程执行完毕后失效。
变量的使用:
set @variable=expression
或者
select @variable=expression
##2.运算符
运算符分为:算术运算符、逻辑运算符、赋值运算符、比较运算符、字符串连接运算符等,基本和C语言相同,这里不再赘述。
##3.批处理
批处理定义为用户编写的一个或多个语句的集合,以go作为批处理结束的标志。
##4.注释
单行注释:—注释内容
多行注释: /* 注释内容*/
##5.流程控制
5.1.set语句
set语句主要用于给变量赋值,比如:
set @student_name=‘jack ma’
5.2.begin end语句
begin end语句用以定义语句块,这个语句块将被作为一个整体
比如定义一个从student表中选择全部人员信息的语句块:
begin
select *
from student
end
5.3.if else语句
用以条件判断,格式:
if boolean_conditions
…
else
…
5.4.case语句
多分支条件语句,格式
5.4.1 简单case语法:
case expression
when when_expr1 then result_expr1
when when_expr2 then result_expr2
…
end
5.4.2 搜索case语法:
case
when bool_expr1 then result_expr1
when bool_expr2 then result_expr2
....
end
5.5.while循环
语法:
while conditions
....
[break|continue]
break与continue的用法与c语言一致
5.6.return语句
为了能够结束当前过程,使用return语句直接返回
语法:
return expr
##6.函数
t-sql中的函数分为:系统内嵌函数、用户自定义函数
6.1.系统内嵌函数
系统内嵌函数包括:时间函数、数学函数、聚合函数、字符串函数。
6.1.1数学函数
sin、cos、tan等,具体查询帮助文档
6.1.1时间函数
(1)getdate():获取系统当前日期和时间
(2)datename(datepart,date_expr):以字符串的形式返
回由datepart指定的date_expr时间部分。
(3)datepart(datepart,date_expr):以数值的形式返
回由datepart指定的date_expr时间部分。
(4)day(date_expr):返回日期中的日
(5)month(date_expr):返回日期中的日
(6)year(date_expr):返回日期中的日
6.1.2.聚合函数
不再赘述
6.1.3.字符串函数
(1)ascll(char):返回char对应的ascii码
(2)char(int_expr):返回int_expr对应的字符
(3)lower(str):返回str对应的小写str
(4)upper(str):返回str对应的大写str
(5)ltrim(str_expr):去掉str_expr左边的空格
(6)rtrim(str_expr):去掉str_expr右边的空格
(7)space(int_expr):返回int_expr个空格str
(8)str(float,len,decimal):将float转换为具有
decimal个小数点长度为len的字符串
(9)reverse(str_expr):将str_expr反转
(10)charindex(patten,str):返回pattern在str中
的第一个位置
6.2.用户自定义函数
用户自定义函数分为:标量函数、内嵌表值函数、多语句表值函数
6.2.1标量函数
标量函数是指函数返回的是标量(具体的一个值)。
语法:
create function f_name(@paramter1
datatype1,...)
returns datatype
as
begin
....
return value
end
例子:
创建一个函数age_gt(@age1 int)用以查询student表中大于等于age1年龄的人员总数。
代码:
use student
go
create function age_gt(@age1 tinyint)
returns tinyint
as
begin
declare @cn_person tinyint
set @cn_person=
(
select COUNT(*)
from student
where age>=@age1
)
return @cn_person
end
select dbo.age_gt(25) as '符合年龄要求人数'
6.2.2内嵌表值函数
这种函数返回的是一个表,不用begin end定义语句块,仅用
return返回表即可。
语法:
create function name(@p1 datatype1,....)
returns table
as
return (select states_ment)
例子:
在student表上创建一个内嵌表值函数student_dp(@major
char(10))返回student表中@major指定系的学生信息。
代码:
use student
go
create function student_dp(@major char(10))
returns table
as
return (select *
from student
where department=@major
)
select * from dbo.student_dp('自动化系')
6.2.3.多语句表值函数
多语句表值函数具有以上两种函数的特点,但依然用begin end定义函数体,另外在返回的表的时候,将返回的表变成了表变量,可以自己定义返回的表变量格式
语法:
create function name(@p1 datatype1,...)
returns @n1 table(def...)
as
begin
....
return ---最后必须有一个空的return语句
end
例子:
定义表多语句表值函数sc_1(@classid char(10))查询student表中选择@classid课程的学生信息。
代码:
use student
go
create function sc_1(@classid char(10))
returns @result table
(no char(10),
name char(40),
age int,
department nchar(10),
identityid char(10)
)
as
begin
insert into @result(no,name,age,department,identityid)
select no,name,age,department,identityid
from student
where @classid=classid
return
end
select * from sc_1('b1')
##7.游标
为什么要用游标:
以往的查询都是选择表中的几行或一行,每次选择都只能选择特定的行集合,不能逐条的取记录,不大方便,因此引入游标。
游标的功能:
1.定位到表中特定行,类似于指针
2.通过游标可以对表中数据进行修改
使用游标的过程分为:
定义游标、打开游标、操作游标取数据、关闭游标、释放游标
类似于C语言中的文件操作
1.定义游标
语法:
declare cursor_name cursor
[local|globle|scroll|dynamic|static|read_only]
for
select…
for update of column_list
以上的local表示定义本地游标,globle表示定义游标的作用域为全局,scroll表示游标可以向前、后自由移动,并可以修改表中数据;dynamic与scroll类似;static表示游标读取的表示是只读静态的,不能通过游标对表进行修改,也不能反映表中的修改,这时游标中的内容只是基本表的临时表;read_only类似于static。for update of column_list指定可以修改的列,如果没有指定,则默认全都可以修改。
例子:
定义一个student表上的scroll游标st_cursor_22,选取表中年龄等于22岁的人员信息。
代码:
use student
go
declare st_cursor_22 cursor
scroll
for
select *
from student
where age=22
2.打开游标
语法:
open cursor_name
3.使用游标
使用游标,主要是从游标指向的表中数据开始对表进行操作。
语法:
fetch [next|prior|first|last|absolute
[n|@n]|relative [n|@n]
]
from cursorname
into @var_name1,....
参数说明:
next:取当前元素的下一个元素
prior:取当前元素的前一个元素
last:取最后一个元素
first:取第一个元素
absolute n:取从表头到表尾第n个元素,若n为负数,则表示取
从表尾巴到表头的第n个元素,为正数,则表示取从表头到表尾的
第n个元素,若n超过表长,当n为正时,此时的数据已经超过表
尾,使用prior可以查询表尾数据,反之,使用next可以查看表
头数据。
relative n:与absolute类似,只不过游标的起点变成了当前
位置。
@var_name_list:表示要将游标中选取的属性列赋值进变量列
表中去,要求各列表变量的属性要和源表中的属性相容
例子:
打开st_cursor_22游标,从游标中取下一条数据并显示
代码:
open st_cursor_22
fetch next
from st_cursor_22
4.关闭游标
语法:
close cursor_name
例子:
关闭st_cursor_22游标
代码:
close st_cursor_22
5.释放游标
游标在使用完关闭之后还要释放游标。
语法:
deallocate cursor_name
例子:
释放游标st_cursor_22
代码:
deallocate st_cursor_22
您的赞助将是我不断创作的最大动力,谢谢支持!!!
如果您觉得我的文章对您有帮助,可以通过以下方式进行赞赏: