gpt4 book ai didi

c# - 从 C# 调用 SQL select 语句数千次并且非常耗时。有没有更好的办法?

转载 作者:太空狗 更新时间:2023-10-29 20:44:49 25 4
gpt4 key购买 nike

我从一个 excel 文件中获得了 ID 和金额的列表(数以千计的 ID 和相应的金额)。然后我需要检查数据库以查看每个 ID 是否存在,以及它是否确实检查以确保数据库中的数量大于或等于 excel 文件中的数量。

问题是运行此 select 语句超过 6000 次并返回我需要的值需要很长时间。即使以 1/2 秒的速度完成所有选择,也需要大约一个小时。 (我通常最多不会得到超过 5 个结果)

有没有更快的方法来做到这一点?

是否有可能以某种方式一次传递所有 ID,只需调用 1 次即可获得大量集合?

我尝试过使用 SqlDataReaders 和 SqlDataAdapters,但它们似乎差不多(无论哪种方式都太长)

下面是如何工作的一般概念

for (int i = 0; i < ID.Count; i++)
{
SqlCommand cmd = new SqlCommand("select Amount, Client, Pallet from table where ID = @ID and Amount > 0;", sqlCon);

cmd.Parameters.Add("@ID", SqlDbType.VarChar).Value = ID[i];

SqlDataAdapter da = new SqlDataAdapter(cmd);

da.Fill(dataTable);
da.Dispose();
}

最佳答案

您可以将所有值传递到 中,而不是长长的 in 列表(难以参数化并且在执行计划方面存在许多其他低效问题:编译时间、计划重用和计划本身)一次通过表值参数。

参见 arrays and lists in SQL Server了解更多详情。

通常我会确保给表类型一个主键并使用选项(重新编译)来获得最合适的执行计划。

关于c# - 从 C# 调用 SQL select 语句数千次并且非常耗时。有没有更好的办法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25653207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com