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

原文地址:https://www.cnblogs.com/Jason-365/p/8168990.html

时间: 2024-10-07 21:52:17

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

SQL Server存储过程和游标有关实例以及相关网址

内含游标的存储过程实例 第一种写法 GO BEGIN IF (object_id('PT_FAULT_REPORT', 'P') is not null) drop proc PT_FAULT_REPORT; END GO CREATE PROCEDURE PT_FAULT_REPORT (@index int, @stop_time DATETIME, @start_time DATETIME) AS DECLARE @departmentindex int, @departmentname

SQL Server 存储过程种游标的使用,print输出问题

......此处略去N个字...... DROP PROCEDURE test_proc; CREATE PROCEDURE test_proc AS DECLARE @u_id INT ; DECLARE @u_name VARCHAR (255) ; DECLARE @age INT ; --声明游标 --select中的参数,必须要和游标取出来的变量名相同 DECLARE mycursor CURSOR FOR SELECT u_id,u_name,age FROM u_us ; --打开

Sql server存储过程中常见游标循环用法

原文:Sql server存储过程中常见游标循环用法 用游标,和WHILE可以遍历您的查询中的每一条记录并将要求的字段传给变量进行相应的处理 DECLARE @A1 VARCHAR(10), @A2 VARCHAR(10), @A3 INT DECLARE YOUCURNAME CURSOR FOR SELECT A1,A2,A3 FROM YOUTABLENAME OPEN YOUCURNAME fetch next from youcurname into @a1,@a2,@a3 while

SQL Server 存储过程具体解释

SQL Server 存储过程具体解释 存储过程的优缺点 ◆长处: 运行速度更快. 存储过程仅仅在创造时进行编译,而一般SQL语句每运行一次就编译一次,所以使用存储过程运行速度更快. 存储过程用于处理复杂的操作时,程序的可读性更强.网络的负担更小. 使用存储过程封装事务性能更佳. 能有效的放注入,安全性更好. 可维护性高.在一些业务规则发生变化时.有时仅仅需调整存储过程就可以.而不用修改和重编辑程序. 更好的代码重用. ◆ 缺点: 存储过程将给server带来额外的压力. 存储过程多多时维护比較

SQL Server DDL 触发器(Trigger)-- 介绍

SQL Server DDL 触发器(Trigger)-- 介绍 触发器(Trigger)以往仅用在特定的对象上,如数据表.当数据维护语言(DML)的Insert.Delete.Update语法针对这些对象工作时,由系统自动调用对应的触发器,而在SQL Server 2000中增加了Instead of Trigger,通过触发器来取代原本要执行的添加.修改.删除语法,且可以设置在视图上.由于Instead of Trigger是在DML语法真的改变数据写入事务日志之前触发,因此,也称为Befo

SQL Server基础之&lt;游标&gt;

查询语句可能返回多条记录,如果数据量非常大,需要使用游标来逐条读取查询结果集中的记录.应用程序可以根据需要滚动或浏览其中的数据.本篇介绍游标的概念.分类.以及基本操作等内容. 一:认识游标   游标是SQL Server的一种数据访问机制,它允许用户访问单独的数据行.用户可以对每一行进行单独的处理,从而降低系统开销和潜在的阻隔情况,用户也可以使用这些数据生成的SQL代码并立即执行或输出. 1.游标的概念  游标是一种处理数据的方法,主要用于存储过程,触发器和 T_SQL脚本中,它们使结果集的内容

SQL Server:触发器详解

SQL Server:触发器详解 1. 概述 2. 触发器的分类 3. Inserted和Deleted表 4. 触发器的执行过程 5. 创建触发器 6. 修改触发器: 7. 删除触发器: 8. 查看数据库中已有触发器: 9. “Instead of”相关示例: 10. “After”触发器 11. 参考资源 1. 概述 触发器是一种特殊的存储过程,它不能被显式地调用,而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活. 所以触发器可以用来实现对表实施复杂的完整性约束. 2. 触发器的分类

SQL Server存储过程的初步认知

什么是存储过程? 存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令.实际上存储过程就是能完成一定操作的一组SQL语句. 为什么要用存储过程? 1.  存储过程只在创造时候编译,以后每次执行存储过程都不需要再重新的编译,而一般的SQL语句每执行一次就需要编译一次,所以使用存储过程可提高数据库执行速度. 2.  当对数据库进行复杂操作时,可将此复杂操作用存储过程封装起来与数据库提供的事物处理结合在一起. 3.  存储过程可以重复的使用,降低开发人员的工作量,提高工作效率. 4.  安全

SQL Server 存储过程(转载)

SQL Server 存储过程 Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. Ø 存储过程的概念 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行. 存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数.输出参数.返回单个或多个结果集以及返回值. 由于存储

简单的如何创建sql server存储过程

学习sql server数据库,sql server存储过程的建立方法是一定要知道的,下面将教您如何建立sql server存储过程,希望对您有所帮助. 在对象资源管理器中,连接到某个数据库引擎实例,再展开该实例. 展开“数据库”.sql server存储过程所属的数据库以及“可编程性”. 右键单击“存储过程”,再单击“新建存储过程”. 在“查询”菜单上,单击“指定模板参数的值”. 在“指定模板参数的值”对话框中,“值”列包含参数的建议值.接受这些值或将其替换为新值,再单击“确定”. 在查询编辑