存储过程
存储过程(Stored Procedure)是在数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。
1.保存在数据库中 2.编译之后的Sql语句---相对来说,性能高 3.就有点像在C#中的一个具体的操作某一个业务逻辑体的方法 4.把一个业务操作流程小扭转的数据库动作,全部封装到数据库中去;直接调用就可以做业务逻辑处理 5.把所有的业务逻辑都丢给数据库了---增加了数据库的压力
1、优势
1.存储过程允许标准组件式编程,每一个业务逻辑的处理都可以独立定义成一个存储过程;面对一些业务逻辑的更新,其实只需要修改数据库存储过程即可;
2.存储过程能够实现较快的执行速度---相比于执行相同的Sql语句而言
3.存储过程减轻网络流量
4.存储过程可被作为一种安全机制来充分利用----防止Sql注入
执行存储过程: exec '存储过程名称' 参数,参数
出现问题,不好调试;
现在互联网时代;数据库的压力造成的性能问题,是最大的问题;尽量让数据库少做事儿;
2、系统存储过程:
2、系统存储过程:
exec sp_databases; --查看数据库 exec sp_tables; --查看表 exec sp_columns student;--查看列 exec sp_helpIndex student;--查看索引 exec sp_helpConstraint student;--约束 exec sp_stored_procedures; exec sp_helptext 'sp_stored_procedures';--查看存储过程创建、定义语句 exec sp_rename student, stuInfo;--修改表、索引、列的名称 exec sp_renamedb myTempDB, myDB;--更改数据库名称 exec sp_defaultdb 'master', 'myDB';--更改登录名的默认数据库 exec sp_helpdb;--数据库帮助,查询数据库信息 exec sp_helpdb master;exec sp_configure--例:--表重命名 exec sp_rename 'stu', 'stud'; select * from stud; --列重命名 exec sp_rename 'stud.name', 'sName', 'column'; exec sp_help 'stud'; --重命名索引 exec sp_rename N'student.idx_cid', N'idx_cidd', N'index'; exec sp_help 'student'; --查询所有存储过程 select * from sys.objects where type = 'P'; select * from sys.objects where type_desc like '%pro%' and name like 'sp%';
3.自定义分页存储过程
----分页存储过程 ---写过存储过程的 刷个1,否则刷个2 ---存储过程、row_number完成分页 if (object_id('spSqlPageByRowNumber', 'P') is not null) drop proc spSqlPageByRowNumber go ----分页存储过程 CREATE proc [dbo].[spSqlPageByRowNumber] @tbName varchar(1000), --表名 @tbFields varchar(2000), --返回字段 @PageSize int, --页大小 @PageIndex int, --第几页 @strWhere varchar(1000), --查询条件 @StrOrder varchar(1000), --排序条件 @Total int output --返回总记录数 as declare @strSql varchar(5000) --主语句 declare @strSqlCount nvarchar(1000)--查询记录总数主语句 --------------总记录数--------------- if @strWhere !='' begin set @strSqlCount='Select @Total=count(*) from ' + @tbName + ' where 1=1 '+ @strWhere end else begin set @strSqlCount='Select @Total=count(*) from ' + @tbName end --------------分页------------ if @PageIndex <= 0 begin set @PageIndex = 1 end set @strSql='Select * from (Select row_number() over('+@strOrder+') rowId,'+ @tbFields +' from ' + @tbName + ' where 1=1 ' + @strWhere+' ) tb where tb.rowId >'+str((@PageIndex-1)*@PageSize) +' and tb.rowId <= ' +str(@PageIndex*@PageSize) print @strSql print @strSqlCount exec sp_executesql @strSqlCount,N'@Total int output',@Total output exec(@strSql) GO declare @totalCount int; exec spSqlPageByRowNumber 'company','Name',5,2,'','order by id desc',@totalCount output select @totalCount output
本文来自博客园,作者:Raymon撸码记,转载请注明原文链接:https://www.cnblogs.com/RaymonGoGo/p/16495651.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)