@OV_iReturnValue 0为执行成功; 200:操作失败 @OV_sReturnText 返回具体的执行消息 @OV_iTotalRow int 总共多少条数据
返回结果:
sFlow varchar(12) 流程号 iType tinyint 类型(0:奖励 1:惩罚) sName1 varchar(8) 员工姓名 iMoney numeric(12,2) 钱 sContent varchar(150) 备注 dtInsert datetime 录入日期 sName2 varchar(8) 操作员姓名 */ BEGIN SET NOCOUNT OFF SELECT @OV_iReturnValue = 0 SELECT @OV_sReturnText = '查询IM某网吧员工奖惩报表成功' /*获取指定网吧账号下的员工奖惩数据总条数*/ SELECT @OV_iTotalRow = COUNT(1) FROM Employee.tRewardAndPunishment(NOLOCK) WHERE sNbid = @V_snbid PRINT @OV_iTotalRow ;WITH T AS (
SELECT RowId=ROW_NUMBER()OVER(Order BY dtInsert DESC), sFlow, iType, sName1, iMoney, sContent, dtInsert, sName2 FROM Employee.tRewardAndPunishment WHERE sNbid = @V_snbid
) SELECT sFlow, iType, sName1, iMoney, sContent, dtInsert, sName2 FROM T WHERE RowId > @V_PageIndex*@V_PageCount AND RowId <= (@V_PageIndex+1)*@V_PageCount SET NOCOUNT OFF END GO--这个应该可以看懂的吧
索引设计的合理,硬件条件保证,不需要用分区表也能做好的个人愚见
怎么实现分页呢?这个我这里给你一个例子:
USE Employee
GO
IF OBJECT_ID('Employee.UP_Get_tRewardAndPunishment') IS NOT NULL
DROP PROC Employee.UP_Get_tRewardAndPunishment
GO
CREATE PROC Employee.UP_Get_tRewardAndPunishment
(
@V_sNbid varchar(30), --网吧编号
@V_PageIndex int=0, --当前页
@V_PageCount int=10, --每页多少条当前第几页
@OV_iReturnValue int = 0 OUTPUT, --状态:0表示正确执行 200表示操作失败
@OV_sReturnText varchar(100)='' OUTPUT, --错误文本,返回具体错误
@OV_iTotalRow int=0 OUTPUT --总共多少条数据
)
AS
/*
过程描述:IM留言报表查询
接口目的:获取指定网吧的IM留言报表
业务逻辑:传入网吧帐号,按照时间降排列IM留言报表
传入参数:
@V_snbid varchar(30) 网吧账号
@V_PageIndex int=0 当前页
@V_PageCount int=10 每页多少条当前第几页
输出参数:
@OV_iReturnValue 0为执行成功; 200:操作失败
@OV_sReturnText 返回具体的执行消息
@OV_iTotalRow int 总共多少条数据
返回结果:
sFlow varchar(12) 流程号
iType tinyint 类型(0:奖励 1:惩罚)
sName1 varchar(8) 员工姓名
iMoney numeric(12,2) 钱
sContent varchar(150) 备注
dtInsert datetime 录入日期
sName2 varchar(8) 操作员姓名
*/
BEGIN
SET NOCOUNT OFF
SELECT @OV_iReturnValue = 0
SELECT @OV_sReturnText = '查询IM某网吧员工奖惩报表成功'
/*获取指定网吧账号下的员工奖惩数据总条数*/
SELECT
@OV_iTotalRow = COUNT(1)
FROM
Employee.tRewardAndPunishment(NOLOCK)
WHERE
sNbid = @V_snbid
PRINT @OV_iTotalRow
;WITH T
AS
(
SELECT
RowId=ROW_NUMBER()OVER(Order BY dtInsert DESC),
sFlow,
iType,
sName1,
iMoney,
sContent,
dtInsert,
sName2
FROM
Employee.tRewardAndPunishment
WHERE
sNbid = @V_snbid
)
SELECT
sFlow,
iType,
sName1,
iMoney,
sContent,
dtInsert,
sName2
FROM
T
WHERE
RowId > @V_PageIndex*@V_PageCount
AND RowId <= (@V_PageIndex+1)*@V_PageCount
SET NOCOUNT OFF
END
GO--这个应该可以看懂的吧
虽然目前表里的数据量不大,但是考虑到以后数据的不断增加。目前还是想把数据表分区,暂时想分两个区,通过一个bit标志将数据分开。(具体这个bit也是根据某个日期点去设置的,比如说一年)
bit=0的数据可以让他查具体的数据。
bit=1的数据做为历史数据。然后就是做每日的汇总,将汇总的结果放到另一张些汇总表中存放,以便读取。
至于当日的数据及汇总数据,就只能通过即时的执行存储过程去获取了。不知道这样可不可行,麻烦再指点下!