环境 :SQL Server 2005表定义:
CREATE TABLE [TBL_1] (
[COL_1] [int] NOT NULL,
[COL_2] [int] NOT NULL,
[COL_3] [int] NOT NULL,
[COL_4] [int] NOT NULL,
[COL_5] [datetime] NULL,
[COL_6] [datetime] NULL
CONSTRAINT [PK_TBL_1] PRIMARY KEY CLUSTERED (
[COL_1] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]) ON [PRIMARY]分页要求:
按条件检索后,并按COL_5,COL_6,COL_2,COL_3,COL_4升序排完序后,进行分页。等等实现:
@strWhere -- WHERE子句
(@rowNo -- 当前页的首行行号
(@pageSize -- 一页显示的行数 'SELECT * '
+ 'FROM ( '
+ ' SELECT *, ROW_NUMBER() OVER (ORDER BY COL_5,COL_6,COL_2,COL_3,COL_4) AS row_no '
+ ' FROM tbl_1 '
+ @strWhere
+ ' ) AS w1 '
+ 'WHERE w1.row_no >= ' + STR(@rowNo) + ' AND w1.row_no < ' + STR(@rowNo + @pageSize);有没有比上面更有效率的方法?
CREATE TABLE [TBL_1] (
[COL_1] [int] NOT NULL,
[COL_2] [int] NOT NULL,
[COL_3] [int] NOT NULL,
[COL_4] [int] NOT NULL,
[COL_5] [datetime] NULL,
[COL_6] [datetime] NULL
CONSTRAINT [PK_TBL_1] PRIMARY KEY CLUSTERED (
[COL_1] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]) ON [PRIMARY]分页要求:
按条件检索后,并按COL_5,COL_6,COL_2,COL_3,COL_4升序排完序后,进行分页。等等实现:
@strWhere -- WHERE子句
(@rowNo -- 当前页的首行行号
(@pageSize -- 一页显示的行数 'SELECT * '
+ 'FROM ( '
+ ' SELECT *, ROW_NUMBER() OVER (ORDER BY COL_5,COL_6,COL_2,COL_3,COL_4) AS row_no '
+ ' FROM tbl_1 '
+ @strWhere
+ ' ) AS w1 '
+ 'WHERE w1.row_no >= ' + STR(@rowNo) + ' AND w1.row_no < ' + STR(@rowNo + @pageSize);有没有比上面更有效率的方法?
解决方案 »
- 我写的存储过程有30个入参,执行会报错,参数过多,怎么解决,我是想把两个表的数据一起传给存储过程
- 如何用触发器实现,记录被修改时,在某一特定字段中记录被修改的时间
- 这样的进销存报表如何写?
- 主键操作和过程问题
- 我在XP系统上装了sql server2000,1433端口始终不在侦听,该咋办啊?
- 数据库查询问题
- 如何获得一个表的最后行的,各个字段的值,各位高手指点一下 急用啊
- 有关数据库的自动备份??
- 如何把Oracle的库导入到SQL Server中??
- SQL语句中如何得到自动添加的id号?
- 为什么用SQLXML帮助文档的“在.net环境中使用SQLXML Bulk Load”方法往SQLServer2000导入XML文件,总是提示数据源错误呢?
- 如何在一个字段之前插入一个字段
FROM tbl_1 '
+ @strWhere +' AND ROW_NUMBER() OVER (ORDER BY COL_5,COL_6,COL_2,COL_3,COL_4)>= ' + STR(@rowNo) + ' AND ROW_NUMBER() OVER (ORDER BY COL_5,COL_6,COL_2,COL_3,COL_4)< ' + STR(@rowNo + @pageSize);
你试下 ,也许会语法错误
很可惜,不行。p.s.
你的名字好有个性啊,不过不像是mm涨了,像是jj涨了。
哈哈,开玩笑的,别介意。谢谢