SQL server存储过程,触发器,游标相关实例

Posted jason-365

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL server存储过程,触发器,游标相关实例相关的知识,希望对你有一定的参考价值。

  1 use MySchool
  2 go
  3 
  4 alter proc P_stu
  5 @pass int= 60
  6 as
  7     select AVG(StudentResult)as 平均分
  8     from Result
  9 
 10     select * from Result
 11     where StudentResult< @pass
 12     go
 13 
 14     
 15     exec P_stu
 16 
 17     go
 18 
 19 ---创建带输出参数的存储过程
 20 
 21 select * from Result
 22 go 
 23 
 24 alter procedure p_res 
 25 @newId varchar(20) output
 26 as
 27     declare @max varchar(20)
 28     
 29     select @max=MAX(StudentNo) from Result
 30     where YEAR(ExamDate)  = YEAR(GETDATE())
 31     and month(ExamDate)  = month(GETDATE())
 32     and day(ExamDate)  = day(GETDATE())
 33 
 34     if (@max is null) 
 35     set @newId = CONVERT(varchar(100),GETDATE(),23)+001
 36     else
 37     begin 
 38         declare @right int
 39         set @right = CONVERT(int,right(@max,3))
 40         set @right = @right +1
 41         set @newId = CONVERT(varchar(100),GETDATE(),23)+-+(case when @right < 10 then 00 when @right<100 then 0 end)+ CONVERT(varchar(10),@right)
 42 
 43     end
 44     go
 45 
 46     declare @rst varchar(20)
 47     exec p_res  @rst output
 48     print @rst 
 49     
 50 
 51     --动态存储过程的数据处理
 52 
 53 
 54     --分页存储过程
 55     --要求
 56         --可输入每页显示条数,默认每页条
 57         --可输入页码进行查询
 58         --可输入条件查询
 59         --可输入表名
 60         --可输入列名
 61         --可输入排序列
 62         --返回总记录数
 63         --返回总页数
 64         --返回查询到的结果
 65   select * from Subject
 66   go 
 67 
 68   if exists(select * from sysobjects 
 69     where name = p_Mypage)
 70     drop procedure p_Mypage
 71     go
 72 
 73   create proc p_Mypage
 74   @tableName varchar(20),
 75   @Fields varchar(200),
 76   @orderFields varchar(200),
 77   @where varchar(200),
 78   @pageSize int = 5,
 79   @pageIndex int = 1,
 80   @RecordCount int output,
 81   @PageCount int output
 82 
 83   with encryption--文本加密
 84   --with recomple--每次都重新编译
 85   as
 86 
 87     declare @sql nvarchar(4000)
 88 
 89     set @sql = select @RecordCount=count(*) from+ @tableName+where 1= 1+ISNULL(@where, )
 90 
 91     exec sp_executesql @sql,N@RecordCount int output,@RecordCount output
 92     set @PageCount = ceiling((@RecordCount+0.0)/@pageSize)、
 93     
 94     set @sql = 
 95     select * from(
 96     select top  + CONVERT(varchar(10),@pageSize)+ +@Fields+ from(
 97     select top + CONVERT(varchar(10),@pageSize*@pageIndex)+ * from +@tableName+
 98     where 1= 1+ISNULL(@where, )+
 99     order by +@orderFields+ )as a
100     order by a.+@orderFields+ desc) as b
101     order by b.SubjectNo
102 
103     exec (@sql)
104 
105 
106     declare @a int ,@b int 
107     exec p_Mypage @tableName= Subject,@Fields = *,
108         @orderFields = SubjectNo,@where=null,
109         @pageSize = 5,@pageIndex = 2,@RecordCount = @a output,
110         @PageCount = @b output
111     print @a
112     print @b
113 
114 
115     --游标
116     
117 
118 
119 
120  declare sur_stu cursor scroll for
121  select StudentName from Student for read only
122  open sur_stu
123 
124  declare @name varchar(20)
125  declare @i int
126  set @i = 1;
127  fetch next from cur_stu into @name
128  while(@@FETCH_STATUS<> -1)
129  begin
130     if(@i = 3)
131     begin
132         print @name
133         set @i=0
134         end
135     fetch next from cur_stu into @name
136     set @i=@i  +1
137 
138 end
139 
140 close sur_stu
141 deallocate sur_stu
142 
143 
144 --使用游标和查存储过程创建分页  性能最差
145 create procedure sqlPage
146 @sql nvarchar (4000),
147 @pageIndex int,
148 @pageSize int,
149 @recordCount int output,
150 @pageCount int output
151 as 
152     declare @p1 int 
153     exec sp_cursoropen @p1 output,@sql,@scrollopt= 1, @ccopt = 1,@rowcount= @recordCount output
154     set @pageCount = CEILING((@recordCount+0.0)/@pageSize)
155     exec sp_cursorfetch @p1,16,@pageIndex,@pageSize
156     exec sp_cursorclose @p1
157 
158 declare @a int ,@b int
159 exec sqlPage select * from student,1,5,@a output,@b output
160 print @a 
161 print @b

 

以上是关于SQL server存储过程,触发器,游标相关实例的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 存储过程和触发器

sql server 游标的知识

批量删除Sql Server对象(表,存储过程,触发器)

SQL server 2008创建触发器实例

利用navicat创建存储过程触发器和使用游标的简单实例

Oracle --- 存储过程函数包游标触发器