【发布时间】:2020-06-02 18:54:53
【问题描述】:
我在 azure 数据库中有巨大的交易表,我们在其中导入包含 +100 万个对象的文件。
public class Transaction
{
[Key]
public int Id { get; set; }
public int TransactionId { get; set; }
public DateTime Date { get; set; }
public decimal Price { get; set; }
public int UserId { get; set; }
public string Product { get; set; }
public int ClientId { get; set; }
public int Uploaed { get; set; }
public string UniqueId { get; set; }
public string Custom1 { get; set; }
public string Custom2 { get; set; }
public string Custom3{ get; set; }
}
导入所有新数据后,我获取所有新事务 ID,并从数据库中获取该客户端的所有事务 ID。
// ids from import
string transactionsString = string.Join(",", transactionIdsCsv);
var result = await _transactionsDataRepository.GetByTransactionIdsAndClientId(transactionIdsCsv.ToArray(), clientId);
// ids from repository
string transactionsDBString = string.Join(",", result.ToList());
// remove rows in db where duplicate transactions ids and clientId=ClientId
但我正在努力寻找最有效的方法。我想做类似的事情
delete from transactions where transactionId IN (transactionsDBString) and clientId = ClientID 但这会删除两个值,我只想删除新值(并保留旧值)
但这会是一个好方法吗?由于有数百万行,即使获取 var result = await _transactionsDataRepository... 也可能需要很长时间。
【问题讨论】:
标签: c# .net-core azure-sql-database