0311sqlTransactsql.docx
- 文档编号:9703645
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:13
- 大小:59.41KB
0311sqlTransactsql.docx
《0311sqlTransactsql.docx》由会员分享,可在线阅读,更多相关《0311sqlTransactsql.docx(13页珍藏版)》请在冰点文库上搜索。
0311sqlTransactsql
Transact-SQL程序设计
一:
Transact-SQL概述:
1.Transact-SQL语言简介
ØSQL语言能够针对数据库完成定义、查询、操纵和控制功能,是关系型数据库领域中的标准化查询语言
Ø微软公司在SQL语言的基础上对其进行了大幅度的扩充,并将其应用于SQLServer服务器技术中,从而将SQLServer所采用的SQL语言称为Transact-SQL语言
Ø目前SQL语言的最新标准为SQL-92,由美国国家标准局制定,包含了语法标准以及对SQL关键字的定义
SQL语言的组成
描述
数据定义语言DDL
主要作用为在数据库中创建并且管理各种数据库对象,如数据库、表、视图、索引、触发器等,主要通过对每个对象的CREATE、ALTER、DROP语句来实现
数据操纵语言DML
用于对数据的查询、添加、修改和删除等操作,使用SELECT、INSERT、UPDATE、DELETE等语句
数据控制语言DCL
用于对用户的权限进行设控制,主要使用GRANT、GRANT、DENY、REVOKE语句
2.批处理
1)概念
Ø批处理是多条Transact-SQL语句构成的集合。
SQLServer将批处理语句进行编译形成一个可执行单元,称为执行计划。
执行计划中的语句一次执行每一条语句,如果在编译过程中出现语法错误,那么批处理中所有的语句均无法正常执行。
如果在运行阶段出现错误时,一般都会中断当前以及其后语句的执行,只有在少数情况下,如违反约束时,仅中断当前出错的语句而继续执行其他语句
Ø如果在事务中含有批处理语句,那么在运行阶段一旦出现错误时,都将会对已经执行的操作结果进行回滚。
假定在事务中包含10条语句,那么如果第五条语句出现错误,则不会执行后续的语句,并且取消之前完成的操作
2)建立批处理时,应该遵循以下规则
Ø不能在批处理中引用其他批处理中所定义的变量
ØCREATEDEFAULT、CREATEPROCEDURE、CREATERULE、CREATETRIGGER和CREATEVIEW语句不能在批处理中与其它语句组合使用
Ø不允许在一个批处理中更改表结构、并引用新的字段
Ø如果EXECUTE语句是批处理中的第一句,则不需要EXECUTE关键字。
如果EXECUTE语句不是批处理中的第一条语句,则需要EXECUTE关键字
Ø一个完整的批处理需要使用GO语句作为结束标记
3)批处理命令:
以批处理的方式处理单个或多个Transact-SQL语句。
有两种基本方法将批处理传送给SQLServer。
Øgo
向SQLServer发送当前Transact-SQL语句的批处理的一种信号。
ØEXEC
用于执行用户定义函数、系统过程、用户定义存储过程或扩展的存储过程。
EXEC可以传递参数,并且可以赋值给返回状态变量
usejxau1201;
go
select*fromemp;
selectcount(*)fromemp;
select*fromdept;
selectcount(*)fromdept;
go
二:
Transact-SQL:
1.语法要素
1)注释语句:
Ø单行注释--
Ø多行注释/*…*/
2)变量:
Ø@局部变量:
作用:
作为计数器计算或控制循环执行的次数。
保存数据值以供流控语句测试。
保存由存储过程返回代码的数据值。
Ø@@全局变量,只读:
3)变量声明:
语法:
DECLARE{@local_variabledata_type}[…n]
实例
declare@namevarchar(20);
declare@ageint;
begin
set@name='aaa';
print@name
end
2.数据类型
1)整型数据:
整数数据类型是最常用的数据类型之一,由正整数和负整数所组成,使用bigint、int、smallint和tinyint数据类型进行存储。
bigint数据类型可存储的数字范围比int数据类型广。
int数据类型比smallint数据类型的存储范围大,而smallint的数值范围又比tinyint类型大。
Øbigint:
可以存储-263到263-1之间的数字,占据8个字节存储空间。
Øint:
可以存储从-231到231-1范围之间的所有整数,占据4字节存储空间。
Øsmallint:
可以存储从-215到215-1范围之间的所有整数,占据2字节存储空间。
Øtinyint:
可以存储从0到255范围之间的所有正整数。
Øbigint:
新增的数据类型
2)浮点数据类型:
ØReal:
用于存储7位小数的十进制数据,所能够表示的范围为-3.40E+38到1.79E+38。
ØFloat:
可以精确到第15位小数,数据范围为-1.79E-308到1.79E+308。
ØDecimal:
提供小数所需要的实际存储空间,可以存储2到17个字节的从-1038-1到1038-1之间的数值。
Ønumeric:
与Decimal数据类型几乎完全相同,区别是在表格中,只有numeric型的数据可以带有identity关键字的列
3)字符数据类型:
ØChar:
最长可以容纳8000个字符,并且每个字符占用一个字节的存储空间。
使用Char数据类型定义变量时,需要指定数据的最大长度。
如果实际数据的字符长度小于指定长度时,剩余的字节用空格来填充。
如果实际数据的长度超过了指定的长度,则超出部分将会被删除。
在表示字符串常量时,需要使用一对单引号’’将其括起来。
Øvarchar:
该数据类型的使用方式与Char数据类型类似。
Char数据类型不同的是,Varchar数据类型所占用的存储空间由字符数据所占据的实际长度来确定。
Øtext:
该数据类型所能表示的最大长度为231-1即2,147,483,647个字符,当需要表示的数据类型长度超过了8000时,可以采用text来处理可变长度的字符数据
4)日期/时间数据类型:
ØDatetime:
范围从1753年1月1日到9999年12月31日,可以精确到千分之一秒,此类型的数据占用8个字节的存储空间。
ØSmalldatetime:
数据范围从1900年1月1日到2079年6月6日,可以精确到分,此类型的数据占4个字节的存储空间
5)货币数据类型:
ØMoney:
占据8字节存储空间。
每4字节分别用于表示货币值的整数部分及小数部分。
Money的取值的范围为-263到263-1,并且可以精确到万分之一货币单位。
ØSmallmoney:
占据4字节存储空间。
每2字节分别用于表示货币值的整数部分以及小数部分。
smallmoney的取值范围为-214,748.3648到+214,748.3647,可以精确到万分之一货币单位
6)二进制数据类型:
7)逻辑数据类型:
8)文本和图形数据类型
三:
函数:
1.聚合函数
聚合函数也称为统计函数,它对一组值进行计算并返回一个数值。
聚合函数经常与SELECT语句一起使用
聚合函数
功能描述
SUM
计算一组数据的和
MIN
给出一组数据的最小值
MAX
给出一组数据的最大值
COUNT
计算总行数
AVG
计算一组值的平均值
CHECKSUM
对一组数据的和进行校验,可探测表的变化
BINARYCHECKSUM
对二进制的和进行校验,可探测行的变化
2.数学函数
数学函数用来对数值型数据进行数学运算
3.字符串函数
字符串函数可以对char、nchar、varchar、nvchar等类型的参数执行操作,并返回相应的结果,返回值一般为字符串或数字
ASCII
NCHAR
SOUNDEX
CHAR
PATINDEX
SPACE
CHARINDEX
REPLACE
STR
DIFFERENCE
QUOTENAME
STUFF
LEFT
REPLICATE
SUBSTRING
LEN
REVERSE
UNICODE
LOWER
RIGHT
UPPER
LTRIM
RTRIM
4.日期时间函数
期时间函数可以对日期时间类型的参数进行运算、处理,并返回一个字符串、数字或日期和时间类型的值
DATEADD
GETDATE
DATEDIFF
GETUTCDATE
DATENAME
MONTH
DATEPART
YEAR
DAY
5.数据类型转化函数
在不同的数据类型之间进行运算时,需要将其转换为相同的数据类型。
在SQLServer中,某些数据类型可以由系统自动完成转换,当系统不能够自动执行不同类型表达式的转换时,可以通过CAST和CONVERT函数对数据进行转换
四:
流程控制语句:
流控制语句采用了与程序设计语言相似的机制,使其能够产生控制程序执行及流程分支的作用。
通过使用流程控制语句,用户可以完成功能较为复杂的操作,并且使得程序获得更好的逻辑性和结构性
1.BEGIN...END语句
用于将一系列的SQL语句合并为一组语句,当需要同时执行两条以上的语句时,可以使用BEGIN…END语句将这些语句包含在内形成一个语句块,作为一个整体来执行。
通常该语句可以嵌套在其他语句中,如条件分支语句、循环语句中。
BEGIN…END语法格式为:
BEGIN
语句1
语句2
…
语句n
END
2.IF…ELSE语句
1)说明:
该语句用于设计条件分支流程,根据给定的条件,程序可以执行不同的操作和运算,从而使程序的功能更加完善。
该语句的格式为:
IF条件表达式
语句块1
[ELSE
语句块2]
其中:
条件表达式为一个布尔表达式,结果为真或假。
当条件成立时,执行语句块1,否则执行语句块2。
当需要判断多个条件时,可以对IF….ELSE进行嵌套。
2)实例:
USEjxau1201
GO
if(SELECTCOUNT(*)FROMempWHEREdeptno=30)>0
BEGIN
DECLARE@dyINT
SELECT@dy=COUNT(*)FROMempWHEREdeptno=30
PRINT'部门人数为:
'
PRINT@dy
END
ELSE
PRINT'改部门没有员工'
3.CASE语句
1)说明:
CASE语句用于计算多个条件并为每个条件返回单个值,以简化SQL语句格式。
CASE语句不同于其他SQL语句,不能作为独立的语句来执行,而是需要作为其他语句的一部分来执行。
CASE语句有两种格式:
简单CASE表达式以及搜索CASE表达式。
(1)简单CASE表达式
语法格式为:
CASE表达式
WHEN条件1THEN结果表达式1
[WHEN条件2THEN结果表达式2
[…]]
[ELSE结果表达式n]
END
在简单表达式中,将表达式与每一个条件依次进行比较,如果遇到表达式与条件相匹配时,停止比较,并且返回满足条件的WHEN子句所对应的结果表达式。
如果表达式与所有的条件都不匹配时,则返回ELSE子句中的结果表达式,如果不存在ELSE子句,则返回NULL值。
如果表达式与多个条件匹配时,CASE函数返回第一次满足条件时的WHEN子句所对应的结果表达式
(2)搜索CASE表达式
搜索CASE表达式与简单CASE表达式的功能类似,但能够实现的条件分支要比简单CASE表达式更为复杂。
其语法格式为:
CASE
WHEN布尔表达式1THEN结果表达式1
[WHEN布尔表达式2THEN结果表达式2
[…]]
[ELSE结果表达式n]
END
2)实例一:
DECLARE@dtDATETIME
SET@dt=DATEPART(w,GETDATE())
SELECT
CASE@dt
WHEN1THEN'星期天'
WHEN2THEN'星期一'
WHEN3THEN'星期二'
WHEN4THEN'星期三'
WHEN5THEN'星期四'
WHEN6THEN'星期五'
WHEN7THEN'星期六'
END
3)实例二:
DECLARE@sjDATETIME
SET@sj=DATEPART(hh,GETDATE())
SELECT
CASE
WHEN@sj>=20and@sj<24THEN'晚上'
WHEN@sj>=14and@sj<20THEN'下午'
WHEN@sj>=12and@sj<14THEN'中午'
WHEN@sj>=10and@sj<12THEN'早晨'
WHEN@sj>=0and@sj<10THEN'临晨'
END
4.WHILE语句
1)说明:
WHILE语句可以在满足条件的情况下重复执行在循环体内的语句。
在循环体内部可以使用CONTINUE、BREAK语句对循环进行控制。
WHILE语句的语法格式为:
WHILE条件表达式
BEGIN
语句块1
[BREAK]
语句块2
[CONTINUE]
语句块3
END
当条件表达式的值为真时,循环将重复执行,直到条件表达式的值为假时,退出循环。
CONTINUE命令可以忽略其后的语句而继续进入下一次循环。
而BREAK命令可以提前终止整个循环过程。
2)实例一:
--1到的和
DECLARE@sumint,@iint
SET@sum=0
SET@i=1
WHILE@i<=100
BEGIN
SET@sum=@sum+@i
SET@i=@i+1
END
PRINT@sum
3)实例二:
DECLARE@numint,@sjDATETIME
SET@sj=GETDATE()
PRINT'当前时间为:
'+CAST(@sjASCHAR(20))
SET@num=0
WHILE1=1
BEGIN
SET@sj=DATEADD(day,1,@sj)
SET@num=@num+1
IFDATEPART(yy,@sj)=2014
BREAK
END
PRINT'距离年月日还有'+CAST(@numASVARCHAR(10))+'天'
5.其他
1)Try...catch:
异常处理
--超过了sno的数据长度,异常
begintry
insertintot_students(sno,sname)values('20120011111111','aaa')
endtry
begincatch
print'插入失败';
endcatch
2)waitfor:
等待执行
--在:
00执行查询
begin
waitfortime'20:
00';
select*fromt_students;
end;
--在一分钟后执行查询
begin
waitfordelay'00:
01';
select*fromt_students;
end;
五:
事务:
SSMS工具默认为自动提交,设置为不自动提交勾选“setcursor_close_on_commit”,就不会自动提交,需要手动提交commit,或者rollback回滚:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 0311 sqlTransactsql