存储过程的一些讲解

来源:互联网 发布:js 数组函数 filter 编辑:程序博客网 时间:2024/05/16 04:46
--得到系统中的数据库
select *from sysdatabases
--以存储过程的方式获取
--exec执行
--使用系统存储过程的语法 exec存储过程名(参数列表)
exec sp_databases
--查询selltb相关的信息
exec sp_help 'selltb'


--数据库相关活动信息
exec sp_helpdb
--重命名(执行时注意其他的活动窗口要关闭)
exec sp_renamedb 'sales','newsaledb'
--显示表student常用的列字段
exec sp_columns student
--
EXEC xp_cmdshell cmd
--查看注册表信息
EXEC xp_cmdshell regedit


select *from student
/*
create proc 存储过程名
as
begin
业务逻辑
end
*/
--利用存储过程查找出id>4的学生


create proc getstu
as
begin
select *from student where stuid>4
end
--调用存储过程 exec自定义存储过程名称【参数值】
exec getstu










--采用游标的方式将id>4的学生姓名显示出来
--修改存储过程的关键字 alter
alter proc getstu
as
begin
--变量的声明
declare @stuname varchar(20)
declare stu_cursor cursor for select stuname from student
--开启游标
open stu_cursor
--从游标中取值
fetch next from stu_cursor into @stuname
--不为空且取数据正常时 循环取值
while @@fetch_status=0
begin
 print @stuname
 fetch next from stu_cursor into @stuname
end
--关闭游标
close stu_cursor
--销毁游标
deallocate stu_cuesor
end










alter proc getstu
--输入参数的声明 如果参数有多个 中间用逗号隔开
--给@stuid设置默认值
@stuid int
as
begin
--变量的声明
declare @stuname varchar(20)
declare stu_cursor cursor for select stuname from student where stuid>@stuid
--开启游标
open stu_cursor
--从游标中取值
fetch next from stu_cursor into @stuname
--不为空且取数据正常时 循环取值
while @@fetch_status=0
begin
 print @stuname
 fetch next from stu_cursor into @stuname
end
--关闭游标
close stu_cursor
--销毁游标
deallocate stu_cuesor
end
--调用带输入参数的存储过程 exec自定义存储过程名称[参数值]
exec getstu 1
--以下为第二种传参方式 只需要确保参数和存储过程中的参数名一致即可
exec getstu @stuid=1










--将stuid以动态方式经行值的专递
--输入参数
alter proc getstu
--输入参数的声明 如果参数有多个 中间用逗号隔开
--给@stuid设置默认值
@stuid int=2
as
begin
--变量的声明
declare @stuname varchar(20)
declare stu_cursor cursor for select stuname from student where stuid>@stuid
--开启游标
open stu_cursor
--从游标中取值
fetch next from stu_cursor into @stuname
--不为空且取数据正常时 循环取值


begiwhile @@fetch_status=0n
 print @stuname
 fetch next from stu_cursor into @stuname
end
--关闭游标
close stu_cursor
--销毁游标
deallocate stu_cuesor
end
--采用输入参数的默认值
exec getstu
--调用带输入参数的存储过程的两种方式 覆盖了默认值
exec getstu 4
exec getstu @stuid=3




--带有输出和输入参数的存储过程
--根据传入的学生id 查找学生的姓名


create proc getstuinfo
@stname varchar(30) output,




@stuid int
as
begin
select @stname=stuname from student where stuid=@stuid
end
--存储过程的调用
declare @stname varchar(20)
begin
 exec getstuinfo @stname output,3


print '学生的姓名:'+@stname
end


select *from student




--存储过程中的错误处理
--raiserror函数的应用
--用户指定id查找学生信息 如果查找不到 则会给出警告
--第一步创建存储过程 参数不变
--第二步判断是否存在指定id的用户


--第一种
create proc getstudent
@stname varchar(30) output,
@stuid int
as
begin
if (not exists(select stuid from student where stuid=@stuid))
     raiserror('你所查找的学生不存在!',16,1)
end
--存储过程调用
declare @stname varchar(20)
begin
 exec getstudent @stname output,10


print '学生的姓名:'+@stname
end






--第二种
create proc getstudent1
@stname varchar(30) output,
@stuid int
as
declare @countnum int
begin
select @countnum=count(*)from student where stuid=@stuid
     if(@countnum=0)
     begin
     raiserror('你所查找的学生不存在!',16,1)
     end
end
--存储过程调用
declare @stname varchar(20),
@errornum int
begin
 exec getstudent1 @stname output,10
 print '学生的姓名:'+@stname
print'错误号'+convert(varchar(20),@@error)
end
/*
利用存储过程对数据经行分页
题目要求 1表名,分页大小,分页的主键字段都可以动态的专递
2返回能够分的页数 当前页得编码
*/






create proc operpag
@pagenum int output,
@nowpag int output,
@pagesize int=2,
@pid int,
@tbname varchar(30)='student'
as
declare @sql nvarchar(200)
begin
   select  @sql=' select top '+cast(@pagesize as varchar)+' * from '+@tbname+' where '
   +@pid+' not in ( '+' select top '+cast((@pagesize*@pagenum)as varchar)+''+@pid+' from 


'+@tbname+')'
   print @sql
end






declare @pid int,
@pagenum int,
@newpag int,
@errornum int
begin


exec operpag  @pid output,4
print'当前页数是:'+@pid


print'错误号'+convert(varchar(20),@@error)

end



最后娱乐一下 一部很好看的儿童动漫:蛋计划http://www.iqiyi.com/v_19rrnegutc.html              

0 0
原创粉丝点击