创建 table 时行的顺序发生变化

Order of rows changes when creating table

我有一个奇怪的问题。

    DROP table IF EXISTS ipl;
    CREATE TABLE ipl(
    match_id VARCHAR(50),
    batting VARCHAR(50),
    bowling VARCHAR(50),
    overn VARCHAR(50),
    batsman VARCHAR(50),
    bowler VARCHAR(50),
    super_over VARCHAR(50),
    bat_runs VARCHAR(50),
    extra_runs VARCHAR(50),
    total_runs VARCHAR(50),
    player_out VARCHAR(50),
    how VARCHAR(50),
    fielder VARCHAR(50));
    BULK INSERT ipl 
        FROM 'F:\Study\Semestersth 
            Sem\COL362\HomeWork\Dataset\deliveries.csv' 
        WITH(FIELDTERMINATOR= ',');
    SELECT * FROM ipl;

这是我用来在 SSMS 中创建 table 的代码。 match_id 从 1 到大约 290,在 csv 文件中按递增顺序排列。当我执行一次这个查询时,一切正常。但是,当我再次这样做时,中间的一些行被移到了最后。

您可以在下面看到: (注意是从4跳到49)

我不知道怎么了。请帮我解决这个问题。谢谢!

SQL table代表无序集合。如果您想要特定顺序的行,则需要 order by。你怎么能用 bulk insert 做到这一点?那么,您需要一个标识列。这个想法是创建具有身份的 table 并使用视图进行批量插入:

create table ipl (
    ipl_id int identity(1, 1) primary key,
    . . .
);

create view vw_ipl as 
    select match_id, batting, bowling, . . .
    from ipl

bulk insert vw_ipl 
    from 'F:\Study\Semestersth Sem\COL362\HomeWork\Dataset\deliveries.csv' 
    with (fieldterminator= ',' );

select *
from ipl
order by ipl_id;

作为关系数据库SQL 服务器不保证返回数据的特定顺序。如果您需要有序数据,请指定 order by 子句。