创建表时行的顺序更改

时间:2019-01-11 11:54:51

标签: sql sql-server-2008 ssms

我有一个奇怪的问题。

    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\Semesters\4th 
            Sem\COL362\HomeWork\1\Dataset\deliveries.csv' 
        WITH(FIELDTERMINATOR= ',');
    SELECT * FROM ipl;

这是我用来在SSMS中制作表格的代码。 match_id在csv文件中按从1到约290的顺序递增。当我执行一次该查询时,一切正常。但是,当我再次这样做时,中间的一些行移到了最后一行。

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

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

2 个答案:

答案 0 :(得分:1)

SQL表表示无序集。如果要按特定顺序排列行,则需要order by。如何使用bulk insert执行此操作?好吧,您需要一个标识列。这个想法是创建一个具有标识的表,并将视图用于批量插入:

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\Semesters\4th Sem\COL362\HomeWork\1\Dataset\deliveries.csv' 
    with (fieldterminator= ',' );

select *
from ipl
order by ipl_id;

答案 1 :(得分:0)

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