sql - 如何按升序排列表格的行并同时保存表格?

标签 sql sql-server sql-server-2008 sql-server-2005

我想通过从现有表中按升序排列行来创建一个新表。我尝试使用的代码是:

SELECT * 
   INTO new_table
FROM existing_table
ORDER BY col1, col2

但是新表不显示任何升序排列的行。谁能告诉我这段代码有什么问题吗?

最佳答案

表中的行无序的,因此谈论行是否有序是没有意义的。而且,查询的结果集是无序的,除非您使用 order by 子句。

也就是说,您可以将行以有序的方式放入表中,从而产生相同的效果。这是一个方法。

select top 0 *
into new_table
from existing_table;

alter table new_table add new_table_id int identity(1, 1);

insert into new_table(<list of columns without new_table_id>)
    SELECT <list of columns without new_table_id>
    INTO new_table
    FROM existing_table
    ORDER BY col1, col2;

id 列保证顺序正确。实际上,行似乎会按顺序插入。严格来说,尽管 id 的值顺序正确,但不能保证插入顺序。

如评论中所述,您还可以:

alter table new_table add new_table_id int identity(1, 1) not null primary key;

您可以这样做,因为表格是空的。作为主键,数据应该按顺序插入。

不过,请注意。查询:

select *
from new_table;

不保证结果的顺序。表中的插入顺序没有区别。您不能仅仅因为行是这样排序的就依赖于特定顺序的结果。例如,在多线程环境中,无论是在理论上还是在实践中,结果通常都是有序的。

关于sql - 如何按升序排列表格的行并同时保存表格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16622509/

相关文章:

mysql - 如何在触发器中更改运行时数据库名称

sql - ORACLE SQL - 如何找到每位教师在教师辞职前 2 个月每天的减免次数?

sql-server - SQL Server CTE - 为每个 childID 查找顶级 parentID?

sql-server - 长度与精度

sql-server - 使用 SQL 将 XML 结构转置/展平为列

sql - 如何获取每个产品所属的所有父子类别?

sql-server-2008 - 简单 T-SQL 查询中 SUSER_SID 行为的真正谜团

sql - 通过 named_scope 返回对象数组 -- has_many...belongs_to 关联; UNION ALL 查询

sql - 我应该使用平面表还是规范化数据库?

mysql - 无PK表