存储过程分为:系统存储过程,系统存储过程。
存储过程语法:
create procedure 存储过程名 @参数 参数类型
as
任意数量的T-SQL语句
例如:
create procedure stu_name @stuname char(10)
as
select * from stu
调用存储过程 exec 存储过程名 参数
例如:exec stu_name 'aa'
事务
--显示事务
Create table aaa
(
Aid int ,
Aname char(10),
Asex char(2) check(asex in (‘m’,’n’))
)
Set xact_abort on
Begin transaction
Intsert into aaa values(101,’aa’,’n’)
Intsert into aaa values(102,’bb’,’m’)
Intsert into aaa values(103,’cc’,’n’)
Intsert into aaa values(104,’dd’,’a’)
Intsert into aaa values(105,’ee’,’m’)
If @@error = 0
Commit
Else
Rollback
Go
Select * from aaa
Drop table aaa
--隐性事务
Set xact_abort on
Set implicit_transactions on
Create table aaa
(
Aid int ,
Aname char(10),
Asex char(2) check(asex in (‘m’,’n’))
)
Intsert into aaa values(101,’aa’,’n’)
Intsert into aaa values(102,’bb’,’m’)
Intsert into aaa values(103,’cc’,’n’)
Intsert into aaa values(104,’dd’,’a’)
Intsert into aaa values(105,’ee’,’m’)
Commit
--默认提交事务
Create table aaa
(
Aid int ,
Aname char(10),
Asex char(2) check(asex in (‘m’,’n’))
)
Intsert into aaa values(101,’aa’,’n’)
Intsert into aaa values(102,’bb’,’m’)
Intsert into aaa values(103,’cc’,’n’)
Intsert into aaa values(104,’dd’,’a’)
Intsert into aaa values(105,’ee’,’m’)
/*-------------------------------------------------------------------
Commit :提交事务中的一切操作,使得事务对数据库的修改有效
Rollback:回滚事务中的一切操作,使得事务对数据库的操作无效
--------------- ---------------------------------------------------
事务控制语句
1. 设置隐性事务模式
1) set implicit_transactions on启动隐性事务模式
2) set implicit_transactions off 关闭隐性事务模式
2. 设置自动回滚模式
1) set xact_abort on 当事务中任意一条语句产生运行时错误,整个事物将中止,并整体回滚。
2) set xact_abort off 当事务中语句产生运行时错误,将中止本条语句并且回滚本条语句。
注意:set xact_abort 的设置是在执行或运行时设置,而不是在分析时设置。
--------------------------------------------------------------
首次执行下列语句都会自动启动一个隐性事务:
Alter table,create,delete,drop,fetch(读取),grant(授予),insert,open,revoke(撤销),select,truncate table,update
事务中不可以使用的语句:
1. 数据库创建:create database
2. 数据库修改:alter database
3. 数据库删除:drop database
4. 数据库备份:dump database,backup database
5. 数据库还原:load database,restore database
6. 事务日志备份:dump transaction,backup log
7. 事务日志还原:load transcation,restore log
8. 配置:reconfigure
9. 磁盘初始化:disk init
10. 更新统计数据:updata statistics
11. 显示或设置数据库选项:sp_dboptin
游标
游标:允许用户能够从select语句查询的结果集中,逐条访问纪录,可以根据用户需要逐行的显示、修改、删除这些记录的数据访问处理机制。(游标就是数据表上的指针)
使用游标的步骤:
(1) 声明游标
declare 游标名 cursor for select 语句
(2) 打开游标
open 游标名
1) 当游标被打开时,指针会自动指在第一行;
2) 打开游标后,如果@@error=0表示游标打开操作成功;
3) 打开游标后,可以用@@cursor_rows返回纪录行数;
(3) 处理数据:
a) 移动到当前行并读取数据
fetch游标名
b) 删除当前行数据
delete from 表名/视图名 where current of游标名
c) 修改当前行数据
update from表名/视图名 set 列名=表达式 where current of 游标名
(4) 关闭游标
close 游标名
(5) 释放游标
deallocate 游标名
游标类型:
(1)static:静态,当用户A察看表中记录的同时,如果有用户B修改表中记录,A用户将不会看到B修改的纪录,只看A使用open打开表时所看到的纪录。
(2)Dynamic:动态,当用户A察看表中记录的同时,如果有用户B修改表中记录,A用户将看到B修改的纪录,也就是表中记录会不断的刷新,但是会耗费较大的系统资源。
(3)Forward Only:仅向前,游标仅能向前滚动。
(4)Scroll:滚动,游标可以前后左右滚动。
select * from student
/*打开游标,读取数据*/
declare c_stu cursor keyset for select * from student
open c_stu
if @@error = 0
print '学生总数' + convert(char(5),@@cursor_rows)
else
print '读取学生数出错!'
close c_stu
deallocate c_stu
---------------------------------------------------------------------------------------------------------
--keyset:键集游标,当游标打开时,在tempdb数据库