存储过程——分页功能及触发器(八)

  • 实现分页功能
  1. 要求取出表A中第31到40条的记录(第4页信息),sql server以自动增长的ID作为主键,注意ID不能是连续的

答案

select top 10 * form A where id not inselect top 30 id from A)

那通过存储过程怎样去实现通用的分页功能的
分析

  1. 转递参数,表名,页码,页面数据展示大小,主键列名

以下雏形便产生了

-- =============================================
-- Author:        <Author,,Name>
-- Create date: 2014年4月13日 00:36:24
-- Description:    分页功能
-- =============================================
CREATE PROCEDURE GetDataByPageNo 
    @tablename nvarchar(100),--表名
    @pagesize int,--页大小
    @pageno int,--页码
    @columns nvarchar(50)--按列排序
AS
BEGIN
    DECLARE @sql nvarchar(1000)
    SET @sql='select top '+CAST(@pagesize as nvarchar(10))+' *  from '+@tablename+
     ' where '+ @columns +' not in (select top '+CAST((@pageno-1)*@pagesize as nvarchar(10))+' '+@columns+' from '+ @tablename+' )'
    EXEC(@Sql)
END
  • 触发器
  1. 触发器简介

触发器是一种DBMS相应特殊表或增、删、改操作的特殊类型的存储过程

    2. 触发器语法

 

具体应用如下

  1. 要求,流水账号实现

流水帐号格式:20140413000000、20140413000000

给产品表添加触发器

通过存储过程添加数据实现存触发器,修改表字段

  2.  具体操作如下

分析:

流水号格式,当期日期+最大id号六位数字组成

代码如下

-- Author:        <Author,,Name>
-- Create date:  2014年4月13日 11:39:48
-- Description:    生成流水号
-- =============================================
CREATE TRIGGER [dbo].[SetProNO] 
   ON   [dbo].[product]--操作表
   AFTER INSERT--具体操作,执行什么操作触发
AS 
BEGIN
    DECLARE @year nvarchar(10)
    DECLARE @mouth nvarchar(10)
    DECLARE @day nvarchar(10)
    DECLARE @id nvarchar(50)
    DECLARE @No nvarchar(50)
    DECLARE @str nvarchar(10)
    SET @year=Datename(yyyy,getdate())
    SET @mouth=Datename(mm,getdate())
    SET @day=Datename(dd,getdate())
    SET @str='000000'
    SELECT @id=MAX(ID) FROM [dbo].[product]
    SET @No=@year+@mouth+@day+RIGHT(@str+@id,6)
    UPDATE product SET No=@No where id=@id
END

调用下面存储过程,直接触发上述触发器

-- =============================================
-- Author:        <Author,,Name>
-- Create date: 2014年4月13日 12:03:13
-- Description:    产品信息添加
-- =============================================
CREATE PROCEDURE [dbo].[Addproduct]
    @Name nvarchar(50),
    @Price money,
    @address nvarchar(50),
    @type int
AS
BEGIN
  INSERT product
  (
      Name,
      Price,
      Address,
      Type
  )
  VALUES
  (      
  @Name,
  @Price,
  @Address,
  @type
  )
END

 

posted @ 2014-04-13 12:27  汉城节度使  阅读(893)  评论(0编辑  收藏  举报