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

 

 

posted @ 2016-09-27 21:30  石shi  阅读(1413)  评论(1编辑  收藏  举报