如何通过特定列值将表中的记录插入另一个表顺序?

时间:2013-06-07 06:32:32

标签: sql sql-server

有谁知道如何通过特定的列值将表中的记录插入另一个表顺序?

例如:

我有下表:

表A:

record_id int,
name varchar(100),
nickname(100),
chain_id int (PK),
chain_n int,
count int,
create_date datetime

tableB的:

record_id int,
name varchar(100),
nickname(100),
chain_id int (PK),
chain_n int,
create_date datetime

我对tableA有以下值:

record_id      name      nickname      chain_id      chain_n      count      create_date
1              Test      One           1             1            2          2013-06-06
2              Test      Two           2             1            5          2013-06-06
3              Test      Three         3             1            3          2013-06-06

我使用以下脚本将数据插入thableB

INSERT INTO tableB
(
    record_id,
    name,
    nickname,
    chain_id,
    chain_n,
    create_date
)
SELECT 
(
    record_id,
    name,
    nickname,
    chain_id,
    chain_n,
    create_date
)
FROM tableA
ORDER BY count DESC

我希望数据会像以下一样插入到tableB中:

record_id      name      nickname      chain_id      chain_n      create_date
2              Test      Two           2             1            2013-06-06
3              Test      Three         3             1            2013-06-06
1              Test      One           1             1            2013-06-06

但是,结果仍然是由chain_id

按顺序排列
record_id      name      nickname      chain_id      chain_n      create_date
1              Test      One           1             1            2013-06-06
2              Test      Two           2             1            2013-06-06
3              Test      Three         3             1            2013-06-06

有没有人知道如何通过计数来设置插入记录顺序

2 个答案:

答案 0 :(得分:3)

似乎record_id是您的主键,因此默认排序由此完成。这就是你的输出与tableA相同的原因。只需在tableB的SELECT子句中使用ORDER BY。

答案 1 :(得分:2)

按特定顺序将记录插入表中对我来说没有多大意义,因为ORDER BY实际上并不会影响数据写入驱动器的方式。所有记录都将按聚集索引的顺序插入。在任何情况下,如果要查询某些字段排序的表中的数据,即使您希望按聚簇索引列排序数据,也应在ORDER BY子句中明确说明它。虽然默认情况下所有数据都是按聚簇索引排序的,但如果您没有在ORDER BY子句中明确指定它,则仍需要SQL Server引擎来定义最佳执行计划并在需要时更改顺序。