抄自
http://www.cnblogs.com/wang123/archive/2006/08/05/468717.html



 1CREATE PROCEDURE GetRecordFromPage
 2    @tblName      varchar(255),       -- 表名
 3    @fldName      varchar(255),       -- 字段名
 4    @PageSize     int = 10,           -- 页尺寸
 5    @PageIndex    int = 1,            -- 页码
 6    @IsCount      bit = 0,            -- 返回记录总数, 非 0 值则返回
 7    @OrderType    bit = 0,            -- 设置排序类型, 非 0 值则降序
 8    @strWhere     varchar(1000= ''  -- 查询条件 (注意: 不要加 where)
 9AS
10
11declare @strSQL   varchar(1000)     -- 主语句
12declare @strTmp   varchar(300)      -- 临时变量
13declare @strOrder varchar(400)      -- 排序类型
14
15if @OrderType != 0
16begin
17    set @strTmp = '<(select min'
18    set @strOrder = ' order by [' + @fldName +'] desc'
19end
20else
21begin
22    set @strTmp = '>(select max'
23    set @strOrder = ' order by [' + @fldName +'] asc'
24end
25
26set @strSQL = 'select top ' + str(@PageSize+ ' * from ['
27    + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
28    + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize+ ' ['
29    + @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
30    + @strOrder
31
32if @strWhere != ''
33    set @strSQL = 'select top ' + str(@PageSize+ ' * from ['
34        + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
35        + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize+ ' ['
36        + @fldName + '] from [' + @tblName + '] where (' + @strWhere + ''
37        + @strOrder + ') as tblTmp) and (' + @strWhere + '' + @strOrder
38
39if @PageIndex = 1
40begin
41    set @strTmp = ''
42    if @strWhere != ''
43        set @strTmp = ' where (' + @strWhere + ')'
44
45    set @strSQL = 'select top ' + str(@PageSize+ ' * from ['
46        + @tblName + ']' + @strTmp + ' ' + @strOrder
47end
48
49if @IsCount != 0
50    set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
51
52exec (@strSQL)
53GO
54



简单调用方法:

 

posted on 2006-10-20 17:25  huazi4995  阅读(151)  评论(0)    收藏  举报