其他分享
首页 > 其他分享> > 存储过程

存储过程

作者:互联网

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