У нас есть этот код C#, который обновит таблицу базы данных SQL Server на основе флагов в структуре.C# код для массового обновления SQL-сервера
public struct stSRK
{
public string Sno;
public string SClaimID;
public bool SType;
public string SText;
}
данные в структуре могут идти ДО 5000-10000 записей в time.Currently мы используем следующие C# код для обновления базы данных, и это делает «п» числа обращений к базе данных на основе структуры. Помогло бы в альтернативе делать массовое обновление, используя одну и ту же структуру. См. Метод ниже
public int UpdateClaims(List<stSRK> _lt, string strClaimType)
{
try
{
int iCount = 0;
for (int i = 0; i < _lt.Count; i++)
{
if (_lt[i].sType == true)
{
if (_lt[i].SText == 'A')
{
iCount += Convert.ToInt16(SQL.ExecuteSQL("UPDATE table SET ClaimType = '" + strClaimType + "' WHERE
(Sno = '" + _lt[i].Sno + "' AND ClaimID = '" + _lt[i].SClaimID + "')"));
}
else
{
iCount += Convert.ToInt16(SQL.ExecuteSQL("UPDATE table SET ClaimType = '" + strClaimType + "' WHERE
(Sno = '" + _lt[i].Sno + "' AND ClaimID = '" + _lt[i].SClaimID + "')"));
}
}
else
{
if (_lt[i].SText == 'B')
{
iCount += Convert.ToInt16(SQL.ExecuteSQL("UPDATE table SET ClaimType = '" + strClaimType + "' WHERE
(Sno = '" + _lt[i].Sno + "' AND ClaimID = '" + _lt[i].SClaimID + "')"));
}
else
{
iCount += Convert.ToInt16(SQL.ExecuteSQL("UPDATE table SET ClaimType = '" + strClaimType + "' WHERE
(Sno = '" + _lt[i].Sno + "' AND ClaimID = '" + _lt[i].SClaimID + "')"));
}
}
return iCount;
}
catch (Exception e)
{
throw e.Message;
}
Стоит отметить: этот подход не очень хорошо масштабируется для больших обновлений - в идеале должен быть гибридный подход, когда вы делаете партии из 1000 записей (или, что то же, что имеет смысл для типов записей/среды, с которыми вы имеете дело). Если вы попробуете вышеуказанное с 200 000 записей, SQL-сервер, скорее всего, будет ужасно шутить в синтаксическом анализе запросов. – Tao
Кроме того, в предложенном вами предложении where может быть логический недостаток: если я хочу удалить запись, где 'Sno = 1 AND ClaimID = 2', и я хочу удалить другую запись, где' Sno = 2 AND ClaimID = 1' , Я также случайно удалю записи, где «Sno = 1 AND ClaimID = 1» или «Sno = 2 AND ClaimID = 2». – Tao
Спасибо Тао, ты очень прав, и я должен был упомянуть об этом в своем ответе. Я подпрыгнул, вероятно, с неправильного предположения, что они всегда уникальны. Это зависит от OP, чтобы помещать это в контекст, поскольку я не знаю, что означает Sno. – Peter