--创建普通存储过程
/*
语法:
create proc 存储过程名
as
sql语句块
go
将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令
*/
/*
存储过程的优点:
.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
.存储过程可以重复使用,可减少数据库开发人员的工作量
.安全性高,可设定只有某此用户才具有对指定存储过程的使用权
存储过程的种类:
.系统存储过程:以sp_开头,用来进行系统的各项设定.取得信息.相关管理工作,
如sp_help就是取得指定对象的相关信息
.扩展存储过程以XP_开头,用来调用操作系统提供的功能
以下为引用的内容:
exec master..xp_cmdshell 'ping 10.8.16.1'
*/
create proc proc_test
as
declare @a int,@b int
set @a=5
set @b=2
print @a+@b
go
exec proc_test
--创建带参数的存储过程
create proc proc_add
@a int ,
@b int
as
print '运行的结果:'+convert(varchar(5),(@a+@b))
go
exec proc_add 5,2
exec proc_add @b=3,@a=3
--创建带输出参数的存储过程
create proc proc_calc
@a int =10,
@b int =3,
@result int output
as
set @result=@a+@b
go
declare @rs int
exec proc_calc @result=@rs output
print @rs
---------------------------------------------------------------------------------------------
--开始事务
begin tran
declare @error int
update cards set balance=balance+100 where cardNum='1234 5678 1234 5678'
set @error=@error+@@error --保存上次操作语句的错误编号
update cards set balance=balance-100 where cardNum='1234 5678 4321 6666'
set @error=@error+@@error --保存上次操作语句的错误编号
if @error<>0 --判断该事务中是否有出现错误操作语句
rollback --回滚事务中的所有操作并结束事务
else
commit --提交事务中的所有操作并结束事务
--事务只能拥有一个结束操作语句
go
select * from cards
---------------------------------------------------------------------------------------------