关于存储过程的通用性之解决

在使用sql server的存储过程中,经常需要一些简单的查询,而且几乎所有的数据表都要用到这种常用的过程,现在我们不必为每个表写一个过程了,废话少说,直接贴代码。
CREATE   PROCEDURE  GetByTableAndWhere
/**
*根据数据表名和where条件返回信息
*注:where条件前须加 and 操作符
*作者:小憨
*创建日期:2007-1-10
*
*/

@SqlTable   nvarchar ( 50 ), -- 数据表名
@SqlWhere   nvarchar ( 200 ) -- 查询条件
  AS
DECLARE   @sqlstr   nvarchar ( 2000 )
SET   @sqlstr = N ' select* FROM  ' + @SqlTable + '  WHERE 1=1  ' + @SqlWhere
Exec  sp_executesql  @sqlstr
GO
------------------------------------------------------------------------
CREATE PROCEDURE DeleteByTableAndWhere
/**
*根据表名和where条件删除信息
*作者:小憨
*2007-1-10
**/
@SqlTable nvarchar(50),
@SqlWhere nvarchar(200)
 AS
DECLARE @sqlstr nvarchar(2000)
SET @sqlstr=N'delete FROM '+@SqlTable+' WHERE  '+@SqlWhere
Exec sp_executesql @sqlstr
GO

下面是一个分页的过程

/****** 对象: 存储过程 dbo.pagination ******/
CREATE   PROCEDURE  pagination
(
    
@SqlWhere   varchar ( 1000 ) = '' -- 查询条件
     @PageSize   int = 20 , -- 每页的记录数
     @PageIndex   int = 1 -- 第几页,默认第一页
     @SqlTable   varchar ( 5000 ), -- 要查询的表或视图,也可以一句sql语句
     @SqlField   varchar ( 4000 ), -- 查询的字段
     @SqlPK   varchar ( 50 ), -- 主键 
     @SqlOrder   varchar ( 200 ), -- 排序
     -- @GetCount bit, --是否获取记录数
     @Count   int = 0  output
)
AS
SET  NOCOUNT  ON
DECLARE   @PageLowerBound   int
DECLARE   @PageUpperBound   int
DECLARE   @sqlstr   nvarchar ( 2000 )

-- 获取记录数
IF   1 = 1 -- @PageIndex=1,可根据实际要求修改条件,如果是总是获取记录数
BEGIN
    
SET   @sqlstr = N ' select @sCount=count(1) FROM  ' + @SqlTable + '  WHERE 1=1 ' + @SqlWhere
    
Exec  sp_executesql  @sqlstr ,N ' @sCount int outPut ' , @Count  OUTPUT
END
-- print @Count
/**/
SET   @PageLowerBound = ( @PageIndex - 1 ) * @PageSize
SET   @PageUpperBound = @PageLowerBound + @PageSize
CREATE   TABLE  #pageindex(id  int   identity ( 1 , 1 not   null ,nid  int )
SET   rowcount   @PageUpperBound  
SET   @sqlstr = N ' insert into #pageindex(nid) select  ' + @SqlPK + '  from  ' + @SqlTable + '  where 1=1  ' + @SqlWhere + @SqlOrder

Exec  sp_executesql  @sqlstr

SET   @sqlstr = ' select  ' + @SqlField + '  FROM  ' +   @SqlTable   + '  inner join #pageindex p on  ' + @SqlPK + ' =p.nid and (p.id> ' + STR ( @PageLowerBound ) + ' ) and (p.id<= ' + STR ( @PageUpperBound ) + ' ) '   + @SqlOrder

Exec  sp_executesql  @sqlstr
SET  NOCOUNT  OFF
DROP   TABLE  #pageindex
GO
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值