想请教大家一下,SQLSERVER的SELECT TOP和DELETE TOP的默认排序是怎样的,为什么在同一张表里用这两句操作,查询和删除的却是不一样的数据? 1、where条件,由于数据的分布where条件不同,排序的结果也不一定一样。 2、有无聚集索引,聚集索引的定义语句。 3、order by的列 如果没有聚集索引且没有where条件,那么top的数据是没有保障的。因为一个表是一个“集合”,集合不存在顺序概念。如果要指定顺序,可以使用以下方法: 1、top中使用with tie,具体使用到联机丛书查找即可。 2、建立聚集索引,使表具有可排序性。 3、order by显式调用,不要使用过多默认行为,除非你很清晰地了解SQLServer的内部机制。 插一句题外话,我发现很多开发同事写top的时候省略了括号,但是在后续版本里面这个是建议加上的。对于某些功能实现,括号成了必须,如传入一个变量来实现top多少。这个时候没有括号会报错。 |
|
来自: icecity1306 > 《数据库资料》