情况:我有此方法可将列表插入到我的一个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
依此类推。当我有数据时,它会将数据按块混合在一起,因此前几百个值可以,然后跳转到值的末尾或中间,并暂时返回第一个值等等。
那么这可能是什么问题?我检查了我要通过的列表,它们似乎是按照添加数据的顺序排列的,只是它们应该是这样。
基于被称为Clustered Index的索引来阐明插入数据库表中的值的物理顺序。
如果按特定顺序插入值很重要,则可以在特定字段(例如,可能是也可能不是主键的整数字段)上创建聚簇索引,然后提供聚簇索引值在将它们插入表之前,请在插入语句中输入。
SQL表表示无序集。没有订购。但是,您可以使用identity()
列保留插入顺序:
create table t (
t_id int identity(1, 1) primary key,
. . .
);