ERP通用存储过程封装(三)
一:解释
SQL Server提供了一种方法:可以将一些预先编译的SQL语句集中起来由SQL Server数据库服务器来完成以实现某个任务,这就是存储过程。存储过程常驻在SQL Server数据库服务器的内存中。
二:优点
1.运行的熟读快,比SQL语句执行速度快2~10倍
2.可以接受参数,输出参数返回单个或多个结果集以及返回值。可以向程序返回错误的原因
3.运行稳定错误较少
4.主要是在服务器上运行,减少对客户机的压力
5.可以包含程序流、逻辑以及对数据库的查询
6.可以在单个存储过程中执行一系列的SQL语句
7.增加网络流量,降低网络负担,如果使用单条调用语句的方式,就必须传输大量的SQL语句
三:结构
实例:
定义一个存储过程:
CREATE PROCEDURE Department_Add -- Add the parameters for the stored procedure here @DepartmentName nvarchar(50), @Tel1 nvarchar(20), @Tel2 nvarchar(20), @Displayorder int AS BEGIN INSERT INTO Department ( DepartmentName, Tel1, Tel2, Displayorder ) VALUES ( @DepartmentName, @Tel1, @Tel2, @Displayorder ) END GO
右键:执行
执行成功:
执行生成的SQL语句:
通用的修改的存储过程:
语句:
-- ============================================= -- Author: 孙丽媛 -- Create date: 2016-9-27 -- Description: 通用的存储过程 -- ============================================= CREATE PROCEDURE UpdateTableByCondition @tableName nvarchar(100), --修改的表 @columns nvarchar(300), --修改的列 --@values nvarchar(600), --修改的值 @conditions nvarchar(500)=‘1=1’ --修改的条件 AS BEGIN declare @sql nvarchar(2000) --定义sql语句 --对变量赋值1.select 在查询中赋值 --2.set 直接赋值 SET @sql='UPDATE '+@tableName+' set '+@columns+' where '+@conditions print @sql END
执行的效果图:
通用删除的存储过程:
-- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: 通用的删除存储过程 -- ============================================= CREATE PROCEDURE DeleteTableByCondition @tableName nvarchar(100), -- 删除的表 @condition nvarchar(500)='' --删除的条件 AS BEGIN declare @Sql nvarchar(1000) SET @Sql = 'Delete from '+@tableName+' '+@condition --print @Sql EXEC(@Sql) END GO
通用添加的存储过程:
Create proc CommonInsertProc ( @tbName nvarchar(255),--表名 @fldName nvarchar(1000),--列名 @fldValue nvarchar(2000) --值 ) As Set nocount on /*定义变量*/ Declare @strSQL varchar(4000) Set @strSQL='Insert into ['+@tbName+'] ('+@fldName +') values('+@fldValue +')' Exec(@strSQL) Go
通用查询的存储过程:
1.实现查询指定表返回所有信息
-- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: 根据指定表返回所有数据 -- ============================================= CREATE PROCEDURE GetDataByTableName @tableName nvarchar(2000) AS BEGIN SET NOCOUNT ON; DECLARE @Sql nvarchar(2000) SET @Sql='select * from '+@tableName EXEC(@Sql) END GO
2.实现查询指定表指定列返回信息
-- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: 查询指定的表,指定列的信息 -- ============================================= CREATE PROCEDURE getDataByTableNameValue @tableName nvarchar(500), @columns nvarchar(2000) AS BEGIN SET NOCOUNT ON; DECLARE @Sql nvarchar(4000) SET @Sql='select '+@columns+' from '+@tableName EXEC(@Sql) End GO
3.实现查询指定表按照不同的条件查询返回信息
-- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: 根据指定列,指定条件,指定表查询数据 -- ============================================= CREATE PROCEDURE GetDataByCondition @tableName nvarchar(200), @columns nvarchar(500), @condition nvarchar(500)=' 1=1' AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; DECLARE @sqlStr nvarchar(2000) SET @sqlStr='select '+@columns+' from '+@tableName+' where '+@condition EXEC(@sqlStr) END GO
分页的通用存储过程:
-- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: 分页数据查询 -- ============================================= CREATE PROCEDURE getDataByPageIndex @table nvarchar(200), --查询表 @coumlns nvarchar(1000), --查询列 @pk nvarchar(50), --主建列 @condition nvarchar(500)=' and 1=1 ', --查询条件 @pageIndex int=0, --列的索引 @pageSize int=10 --列的页数 AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; DECLARE @sql nvarchar(4000) SET @sql='select top '+CAST(@pageSize AS nvarchar(10))+' '+@coumlns +' from '+@table+' where '+@pk +' not in ( select top '+CAST((@pageSize*@pageIndex) AS nvarchar(10))+' '+ @pk+ ' FROM '+@table+ ' where 1=1 '+@condition+')'+@condition END GO