67677新澳门手机版 > 数据库 > 实例学习mssql存储过程分析
实例学习mssql存储过程分析
2020-03-20 19:29

一篇好用的通用分页存储过程,可以用在任何开发上哦,只要小小的改动就好了,有需要的朋友可以参考一下本款实例。 代码如下复制代码 /*通用分页存储过程*/USE HotelManagementSystemGOIF EXISTS(SELECT * FROM sys.objects WHERE NAME='cndoup_GetPageOfRecords')DROP PROCEDURE cndoup_GetPageOfRecordsGO--创建存储过程CREATE PROCEDURE cndoup_GetPageOfRecords@pageSize int = 20, --分页大小@currentPage int , --第几页@columns varchar(1000) = '*', --需要得到的字段 @tableName varchar(100), --需要查询的表 @condition varchar(1000) = '', --查询条件, 不用加where关键字@ascColumn varchar(100) = '', --排序的字段名 (即 order by column asc/desc)@bitOrderType bit = 0, --排序的类型 (0为升序,1为降序)@pkColumn varchar(50) = '' --主键名称ASBEGIN --存储过程开始DECLARE @strTemp varchar(300)DECLARE @strSql varchar(5000) --该存储过程最后执行的语句DECLARE @strOrderType varchar(1000) --排序类型语句 (order by column asc或者order by column desc)BEGINIF @bitOrderType = 1 --降序BEGINSET @strOrderType = ' ORDER BY '+@ascColumn+' DESC'SET @strTemp = '(SELECT min'ENDELSE--升序BEGINSET @strOrderType = ' ORDER BY '+@ascColumn+' ASC'SET @strTemp = '(SELECT max'ENDIF @currentPage = 1--第一页BEGINIF @condition != ''SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@columns+' FROM '+@tableName+' WHERE '+@condition+@strOrderTypeELSESET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@columns+' FROM '+@tableName+@strOrderTypeENDELSE-- 其他页BEGINIF @condition !=''SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@columns+' FROM '+@tableName+' WHERE '+@condition+' AND '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currentPage-1)*@pageSize)+' '+@pkColumn+' FROM '+@tableName+'where'+@condition+@strOrderType+') AS TabTemp)'+@strOrderTypeELSESET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@columns+' FROM '+@tableName+' WHERE '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currentPage-1)*@pageSize)+' '+@pkColumn+' FROM '+@tableName+@strOrderType+') AS TabTemp)'+@strOrderTypeENDENDEXEC (@strSql)END--存储过程结束--分页得到客房信息列表测试EXEC cndoup_GetPageOfRecords 20,2,'房间号=RoomNum,房间状态=(SELECT RoomTypeDes FROM RoomType WHERE RoomTypeID=Room.RoomTypeID),房间状态=(SELECT RSDec FROM RoomStatus WHERE RoomStatusID=Room.RoomStatusID),床位数=BedNum,楼层=Floors,描述=RoomDes,备注=RoomRemark','Room','','RoomID',0,'RoomID'--根据房间号得到客房信息测试EXEC cndoup_GetPageOfRecords 1,1,'房间号=RoomNum,房间状态=(SELECT RoomTypeDes FROM RoomType WHERE RoomTypeID=Room.RoomTypeID),房间状态=(SELECT RSDec FROM RoomStatus WHERE RoomStatusID=Room.RoomStatusID),BedNum,Floors,RoomDes,RoomRemark','Room','RoomNum=304','RoomID',0,'RoomID'

例1:通过存储过程查询数据库中的student表 我们知道在sql中,我们查询一个表,可以通过select*fromstudent进行查询,那在存储过程中该怎么写呢? 解: 首先我们打开查询分析器,; 然后我们先来创建一个存储过程以备等会使用,: createprocedureproc_stu as select*fromstudent go 这样一个存储过程就创建好了,现在我们来执行一下 我们可以在查询分析器中输入:executeproc_stu 便可以看到效果 分析一下上面的例子,proc_stu为存储过程名,select*fromstudent很显然就是SQL语句了,执行的时候我们只需要execute存储过程名,就可以了.其中,procedure和execute可以分别缩写为proc和exec 以上演示了一个很简单的存储过程.下面我们来看一下带参数的存储过程 例2.查询student表中sno(学号)为's1'的记录 createprocproc_stu @ssnovarchar(10) as select*fromstudentwheresno=@ssno go 这样一个带参数的存储过程就OK了,"@变量名"是sql中用来表示用户自定义的参数的方法,有些朋友可能还看到过"@@变量名",这个是系统自带的.也就是说这个变量名是系统定义的,不能随便乱改.这样分析后,相信大家应该看得懂了吧. 执行带参数的存储过程,需要使用如下语句:execproc_stus1也可以不写参数,不过这样的话,必须首先在创建存储过程中加参数赋值,可以赋Null,否则,系统会报错. 最后我们来讲一下如何利用存储过程返回一个值: 例3.返回student表中学生数 方法一: createprocproc_stu @numintoutput--注明是外部变量 as select@num=count(*)fromstudent go 现在我们来执行下: 要使用外部变量,我们先要进行声明:declare @return我们用这个变量来接收存储过程中的外部变量 executeproc_stu,@num=@returnoutput 这样我们便得到了这个返回值,现在我们通过如下赋值语句来显示这个返回值 select'return'=@return 方法二: 注:return只能返回整形数据 createprocproc_stu @numint as select@num=count(*)fromstudent return@num go 我们来执行下: declare@return exec@return=proc_stu select'return'=@return

mssql 存储过程入门与实例应用/*

首先来看看mssql 存储过程创建

create procedure proc_stu as select * from student go

创建一个过程:例子下面的语句创建的架构中的人力资源程序remove_emp:

CREATE PROCEDURE remove_67677新澳门手机版,emp (employee_id NUMBER) AS tot_emps教程 NUMBER; BEGIN DELETE FROM employees WHERE employees.employee_id = remove_emp.employee_id; tot_emps := tot_emps - 1;END;

上一篇:mysql年月分组语句 下一篇:没有了