Microsoft SQL Server:插入列表问题;把清单弄混了



情况:我有一种将列表插入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

等等。当我有我的数据时,它会把数据混合成块,所以前几百个值就可以了,然后它跳到应该在最后或中间的值,在一段时间内返回到第一个值,以此类推。

那么这里可能有什么问题呢?我检查了我正在传递的列表,它们似乎是按顺序的。我添加了数据,只是它们应该是什么样子。

SQL表表示无序集合。没有订单。但是,您可以使用identity()列来保留插入顺序:
create table t (
t_id int identity(1, 1) primary key,
. . .
);

在表中插入时,不要将t_id包含在列列表中。它将自动设置。

然后,您可以通过以下操作"按顺序"获取结果:

select t.*
from t
order by t_id;

插入数据库表中的值的物理顺序是基于称为聚集索引的索引来标识的。

如果按特定顺序插入值对您来说很重要,您可以在特定字段(例如,也可以是主键或不是主键的整数字段(上创建聚集索引,然后在插入语句中提供聚集索引值,然后将它们插入表中。

假设您添加了一个名为Id的整数字段,并在该字段上创建了聚集索引。如果将当前值插入为:

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

然后,如果您在Id字段上查询带有order by子句的表,则您收到的结果将与您插入的结果完全相同:

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

最新更新