Microsoft SQL Server:插入列表问题;混合列表

问题描述 投票:0回答:2

情况:我有此方法可将列表插入到我的一个SQL Server表中:

public void InsertDataAtOnce(List<string> values, List<string> millisecs, string table, string[] parameters)
{
        connection = new SqlConnection(connectionString);
        query = $"INSERT INTO {table} ({parameters[0]}, {parameters[1]}) VALUES (@{parameters[0]}, @{parameters[1]})";

        try
        {
            connection.Open();

            command = new SqlCommand(query, connection);
            command.Parameters.Add($"@{parameters[0]}", SqlDbType.NVarChar);
            command.Parameters.Add($"@{parameters[1]}", SqlDbType.NVarChar);

            for (int i = 0; i <millisecs.Count-2; i++)
            {
                //command.Parameters.Clear();
                command.Parameters[$"@{parameters[0]}"].Value = millisecs[i];
                command.Parameters[$"@{parameters[1]}"].Value = values[i];

                command.ExecuteNonQuery();
            }

            command.Dispose();
            connection.Close();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Connection Error");
            Console.WriteLine(ex);
        }
}

想象一下我插入的表信息应该是这样的(我的表应该包含大约1700个值,然后我通过方法将这个信息传递给了这个方法:

 1. 0.5 15
 2. 0.6 24
 3. 0.7 29
 4. 0.8 32
 5. 0.9 45

但是,当我打开SQL Server Management Studio并检查插入的数据时,它混合了值的顺序,因此对于此数据,结果将是:

 1. 0.5 15
 2. 0.6 24
 3. 0.9 45
 4. 0.8 32
 5. 0.7 29

依此类推。当我有数据时,它会将数据按块混合在一起,因此前几百个值可以,然后跳转到值的末尾或中间,并暂时返回第一个值等等。

那么这可能是什么问题?我检查了我要通过的列表,它们似乎是按照添加数据的顺序排列的,只是它们应该是这样。

c# sql sql-server list
2个回答
0
投票

基于被称为Clustered Index的索引来阐明插入数据库表中的值的物理顺序。

如果按特定顺序插入值很重要,则可以在特定字段(例如,可能是也可能不是主键的整数字段)上创建聚簇索引,然后提供聚簇索引值在将它们插入表之前,请在插入语句中输入。


0
投票

SQL表表示无序集。没有订购。但是,您可以使用identity()列保留插入顺序:

create table t (
    t_id int identity(1, 1) primary key,
    . . .
);
© www.soinside.com 2019 - 2024. All rights reserved.