存储过程
作者:互联网
存储过程(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