ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

存储过程

2022-07-19 20:31:42  阅读:142  来源: 互联网

标签:存储 exec -- 数据库 sp 过程


存储过程(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

标签:存储,exec,--,数据库,sp,过程
来源: https://www.cnblogs.com/RaymonGoGo/p/16495651.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有