续“有关Select Top 100 From TableName的问题”

Muzhu 2003-05-17 03:06:18
如果使用Select * From TableName的排序是固定的,
那这种默认的排序规则是什么呢?
那么我要在数据库的第2条和第3条之间插入数据应该怎么办?
...全文
27 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Muzhu 2003-05-17
  • 打赏
  • 举报
回复
那问一个难一点的问题,请选用你擅长的语言实现两个任意大小的数字相加。
Muzhu 2003-05-17
  • 打赏
  • 举报
回复
谢谢!
caiyunxia 2003-05-17
  • 打赏
  • 举报
回复
主键(可能有多个,自己修改)
使用聚集索引
聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。
聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。例如,如果应用程序执行的一个查询经常检索某一日期范围内的记录,则使用聚集索引可以迅速找到包含开始日期的行,然后检索表中所有相邻的行,直到到达结束日期。这样有助于提高此类查询的性能。同样,如果对从表中检索的数据进行排序时经常要用到某一列,则可以将该表在该列上聚集(物理排序),避免每次查询该列时都进行排序,从而节省成本。
当索引值唯一时,使用聚集索引查找特定的行也很有效率。例如,使用唯一雇员 ID 列 emp_id 查找特定雇员的最快速的方法,是在 emp_id 列上创建聚集索引或 PRIMARY KEY 约束。

说明 如果该表上尚未创建聚集索引,且在创建 PRIMARY KEY 约束时未指定非聚集索引,PRIMARY KEY 约束会自动创建聚集索引。

也可以在 lname(姓氏)列和 fname(名字)列上创建聚集索引,因为雇员记录常常是按姓名而不是按雇员 ID 分组和查询的。

注意事项

Muzhu 2003-05-17
  • 打赏
  • 举报
回复
请问您怎么得知它是按“插入数据的先后顺序”来排序的?在哪里有正式说明吗?请给出!谢谢了!
Muzhu 2003-05-17
  • 打赏
  • 举报
回复
谢谢!好象明白了,但pk是什么意思能说一下吗?
caiyunxia 2003-05-17
  • 打赏
  • 举报
回复
聚集索引的排序
如没有
就是插入数据的先后顺序
caiyunxia 2003-05-17
  • 打赏
  • 举报
回复
select top 2 * from (select top 3 * from tablle) a order by pk desc
CREATE PROCEDURE [dbo].[pro_Pager] @TableName varchar(50), @Condition nvarchar(500), @Fields varchar(500), @CurrentPage int, @PageSize int, @OrderField varchar(100), @OrderType varchar(4) AS set nocount on declare @SQL nvarchar(2000) if @OrderType = 'Desc' begin if @Condition = 'None' begin if @CurrentPage = 1 begin set @SQL = 'select top ' + Cast(@PageSize as varchar) + ' ' + @Fields + ' from ' + @TableName + ' order by ' + @OrderField + ' desc' end if @CurrentPage > 1 begin set @SQL = 'select top ' + Cast(@PageSize as varchar) + ' ' + @Fields + ' from ' + @TableName + ' where ' + @OrderField + '<(select min(' + @OrderField + ') from (select top ' + Cast(@PageSize*(@CurrentPage-1) as varchar) + ' ' + @OrderField + ' from ' + @TableName + ' order by ' + @OrderField + ' desc) temp) order by ' + @OrderField + ' desc' end end else begin if @CurrentPage = 1 begin set @SQL = 'select top ' + Cast(@PageSize as varchar) + ' ' + @Fields + ' from ' + @TableName + ' ' + @Condition + ' order by ' + @OrderField + ' desc' end if @CurrentPage > 1 begin set @SQL = 'select top ' + Cast(@PageSize as varchar) + ' ' + @Fields + ' from ' + @TableName + ' ' + @Condition + ' and ' + @OrderField + '<(select min(' + @OrderField + ') from (select top ' + Cast(@PageSize*(@CurrentPage-1) as varchar) + ' ' + @OrderField + ' from ' + @TableName + ' ' + @Condition + ' order by ' + @OrderField + ' desc) temp) order by ' + @OrderField + ' desc' end end end else begin if @Condition = 'None' begin if @CurrentPage = 1 begin set @SQL = 'select top ' + Cast(@PageSize as varchar) + ' ' + @Fields + ' from ' + @TableName + ' order by ' + @OrderField + ' asc' end if @CurrentPage > 1 begin set @SQL = 'select top ' + Cast(@PageSize as varchar) + ' ' + @Fields + ' from ' + @TableName + ' where ' + @OrderField + ' > (select max(' + @OrderField + ') from (select top ' + Cast(@PageSize*(@CurrentPage-1) as varchar) + ' ' + @OrderField + ' from ' + @TableName + ' order by ' + @OrderField + ' asc) temp) order by ' + @OrderField + ' asc' end end else begin if @CurrentPage = 1 begin set @SQL = 'select top ' + Cast(@PageSize as varchar) + ' ' + @Fields + ' from ' + @TableName + ' ' + @Condition + ' order by ' + @OrderField + ' asc' end if @CurrentPage > 1 begin set @SQL = 'select top ' + Cast(@PageSize as varchar) + ' ' + @Fields + ' from ' + @TableName + ' ' + @Condition + ' and ' + @OrderField + ' > (select max(' + @OrderField + ') from (select top ' + Cast(@PageSize*(@CurrentPage-1) as varchar) + ' ' + @OrderField + ' from ' + @TableName + ' ' + @Condition + ' order by ' + @OrderField + ' asc] temp) order by ' + @OrderField + ' asc' end end end exec sp_executesql @SQL

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧