设为首页 加入收藏

TOP

SQL Server 2005主键重复分页问题处理方法
2014-11-24 13:24:02 】 浏览:571
Tags:SQL Server 2005 重复 问题 处理 方法
SQL Server 2005主键重复分页问题处理方法
1、SQL Server2005
www.2cto.com
无主键、无不重复数据列:可使用多个列值组合形成不重复数据列来模拟主键。
由于2005不支持Row_NUMBER() over(order by 列名)函数,因此不能使用该函数获取唯一编号来达到模拟主键,实现分页。
建议使用分页语句语法如下:
selecttop 每页显示行数 * from 表名A where (A列+B列+C列...) not in(select top (当前页数-1)*每页显示行数) (A列+B列+C列...) from 表名A where条件 order by 列名[desc]) where条件 order by 列名[desc]
如:select top50 * from A where (A.a1+A.a2+A.a3) not in (select top ((1-1)*50) (a1+a2+a3)from A where a4 like '%张%' order by a4 desc) where a4 like '%张%' order by A.a4 desc
www.2cto.com
其中:①、A列、B列、C列为可组成不重复值组合,A列+B列+C列值为NULL时,表示A、B、C三列中有一列值为NULL,导致最终合并结果为NULL,可使用isNull函数来判断,语法为:isNull(列名,默认值),表示如果列值为空,则赋予默认值。如:(isNull(A列,'A')+isNull(B列,'B')+isNull(C列,'C')),
②、desc可选,加上则表示按照order by 列名降序排列。
③、子查询里面和外面都加where条件是为了更准确查询出记录,外面不加where条件,则查询出内容不满足条件值约束。
2、SQL Server2005
无主键、无不重复数据列:
①、可采用SQL Server 2000分页方法进行处理;
②、使用Row_NUMBER() over(order by 列名)函数,模拟主键,来实现分页,ROW_NUMBER() over(order by 列名)函数会生成从1开始的自然数。语法如下:
select * from (selectROW_NUMBER() over(order by A列[desc] as rowNumber, * from 表名 Awhere 条件) new_A where rowNumber between 每页显示行数*(当前页-1)+1 and 每页显示行数*当前页
如:select *from (select ROW_NUMBER() over(order by A.a desc) as rowNumber,* from A where 1= 1 ) new_A where rowNumber between 100*(1-1)+1 and 100*1
其中:desc可选,加上则表示按照order by 列名降序排列。
希望该思路和解决方法,能给遇到同样棘手问题的同仁提供参考和帮助。
弱弱的说一句:没有主键的表不能称之为表。—引用 论坛大神***回复。
At the last,please设计 数据库及表结构的大神,在设计时加上主键,以避免其他不必要的数据操作和维护方面的麻烦事情发生。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇SQL Server timed out和互锁冲突.. 下一篇SQL SERVER 7触发器

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目