简单的sql查询问题?
我这儿有个这样的情况:
表结构:
f_ID int 标识
f_Title nvarchar(200)
f_Type int 0表示置顶文章,1表示普通文章,2表示精华文章
f_RootID int 0表示是发表的文章,其他表示该文章是f_ID为f_RootID的回复文章
f_AddDT datetime
我要按条件(f_RooID=0)查询,把置顶的放在最前面,普通,精华的按日期排序就行了
select f_ID,f_Title,f_Type,f_RootID,f_AddDT,case f_Type when 0 then 0 else 1 end as TType from 表 where f_RootID=0 order by TType,f_AddDT desc
这一句sql可以达到这个要求。但我现在写了一个简单的分页存储过程,想用这个存储过程按上面的要求把记录列出来,就不知道怎么办?
存储过程是:
----------------------------------------------------------------------------------------
--存储过程名:SelRecordByPage
--说明:存储过程分页
--日期:
--返回值:
----------------------------------------------------------------------------------------
CREATE PROCEDURE DBO.SelRecordByPage
(
@tblName VARCHAR(255), --表名
@fldNames VARCHAR(255)='*', --要显示的字段列表
@PageSize INT=10, --每页显示的记录数
@curPage BIGINT=1, --当前页
@fldOrder VARCHAR(255), --关键字段
@strWhere varchar(2000) = '', --查询条件
@strOrder VARCHAR(255) --设置排序
)
AS
SET NOCOUNT ON
DECLARE @strSQL VARCHAR(6000)
DECLARE @strTmpSQL NVARCHAR(2000)
DECLARE @intTmpRecordNum INT
DECLARE @intTmpTotalPage INT
IF @strWhere=''
SET @strWhere='1=1'
IF @curPage<=1
BEGIN
SET @strSQL = 'SELECT Top '+cast(@PageSize as varchar(30))+' '+@fldNames+' FROM '+@tblName+' WHERE '+@strWhere+' '+@strOrder
END
ELSE
BEGIN
--把表中的记录总数返回给变量@intTmpRecordNum
SET @strTmpSQL = 'SELECT @intTmpRecordNum=COUNT(*) FROM '+@tblName+' WHERE '+@strWhere
Exec sp_executesql @strTmpSQL,N'@intTmpRecordNum int out',@intTmpRecordNum out
IF @intTmpRecordNum%@PageSize=0
SET @intTmpTotalPage = @intTmpRecordNum/@PageSize
ELSE
SET @intTmpTotalPage = @intTmpRecordNum/@PageSize+1
IF @curPage>@intTmpTotalPage
SET @curPage=@intTmpTotalPage
SET @strSQL='SELECT Top '+cast(@PageSize as varchar(30))+' '+@fldNames+' FROM '+@tblName+' WHERE '+@fldOrder+' NOT IN (SELECT TOP '+cast((@curPage-1)*@PageSize as varchar(30))+' '+@fldOrder+' FROM '+@tblName+' WHERE '+@strWhere+' '+@strOrder+') AND '+@strWhere+' '+@strOrder
END
--print @strSQL
Exec(@strSQL)
GO
---------------------------------------------
请大家帮忙,或者提提更好的办法,不知道我的问题说清楚没有.....