变量|注释|批处理|流程控制|存储过程函数|游标|事务|锁
SQL Server编程结构
变量
声明局部变量
1 | DECLARE @局部变量名 数据类型 |
可以同时定义多个变量,中间用逗号隔开
赋值局部变量
为局部变量赋值可以用SET或SELECT语句
1 | SET @变量名=表达式 |
注: 如果SELECT语句返回多个值,则局部变量取最后一个返回值。例:
1 | SELECT @Sname = Sname |
显示信息
Print语句
print语句只能显示字符数据类型
注释
1 | /*注释文本*/ |
批处理
批处理是成组执行的一条或多条T-SQL指令
GO语句用于指定批处理语句的结束处,单独使用一行。本身不是T-SQL的部分
注意:
不能在同一个批处理处,先删除,后使用
不在在同一个批处理处,先修改,后使用
流程控制语句
BEGIN…END
1 | BEGIN |
IF语句
IF-THEN语句
1 | IF condition THEN |
IF-THEN-ELSE语句
1 | IF condition THEN |
嵌套的IF语句
在THEN和ELSE子句中还可以包含IF语句
例题
WHILE
GOTO
WAITFOR
RETURN
CASE
存储过程(重点)


过程化 SQL块主要有两种类型,即命名块和匿名块
匿名块每次执行时都要进行编译,它不能被存储到数据库中,也不能在其他过程化SQ L块中调用
过程和函数是命名块,它们被编译后保存在数据库中,称 为持久性存储模块) ,可以被反复调用,运行速度较快
存储过程类型

用户自定义的存储过程

Transact-SQL

CLR

系统存储过程

设计存储过程

存储过程的设计规则


限定存储过程内的名称

对过程定义进行模糊处理

SET语句选项

存储过程的基本概念
存储过程是由过程化SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,因此称它为存储过程,使用时只要调用即可
优点
存储过程降低了客户机和服务器之间的通信量
运行效率高
方便实施企业规则
创建存储过程




带参数存储过程实例

带输出参数实例

带返回状态值实例

1 | CREATE PROCEDURE 过程名([@参数1 类型,.., @参数n 类型) |
1 | --参数不带括号也可以 |
可简写成PROC
无参数
1 | CREATE PROCEDURE aa |
实例
默认参数
1 | EXECUTE exp4 |
执行存储过程
可简写成EXEC
修改存储过程
重命名
1 | ALTER PROCEDURE 过程名1 RENAME TO 过程名2; |
重编译
1 | ALTER PROCEDURE 过程名(参数) |
删除存储过程
1 | DROP PROCEDURE 过程名; |
函数

和存储过程一样都是持久性存储模块;不同的是函数要指定返回类型
自定义函数

标量值函数

内联表值函数


多语句表值函数


定义
1 | CREATE FUNCTION 函数名([参数1, ..., 参数n]) RETURNS<类型> |
执行
1 | CALL/SELECT 函数名([参数1, ..., 参数n]) |
修改
1 | ALTER FUNCTION 过程名 1 RENAME TO 过程名 2; --重命名 |
1 | ALTER FUNCTION 函数名 COMPILE; --重新编译一个函数 |
内置函数


聚集函数

字符串函数



日期函数


数学函数



数据类型转换函数




系统函数



游标


使用游标的步骤
声明游标

INSENSITIVE

SCROLL

游标类型

SELECT_STATEMENT

READ_ONLY
UPDATE
打开游标

读取数据


关闭游标

释放游标

游标运用
使用游标逐行读取


返回指定行记录

使用游标修改数据

使用游标删除数据

使用ORDER关键字改变游标中行的顺序

事务

原子性

一致性

隔离性

持久性

控制事务流程

显示事务
启动事务


事务名称

事务变量名称

WITH MARK

提交事务

回滚事务


自动提交事务




隐式事务



数据锁定

丢失更新

脏读

不可重复读

数据锁分类

共享锁

更新锁

排它锁

意向锁

锁的粒度与时间

自定义锁

使用注意事项


你未必万丈光芒,但始终温暖有光。

