Я сбрасываю миллионы записей в мою таблицу, используя sql массовое копирование. Я обрабатываю свои данные и подготавливаю данные, и как только размер достигает 1000 записей, я использую Sql Bulk copy , чтобы выгрузить данные в таблицу, а затем очиститьdatatable, и этот процесс продолжается.
В конце я фиксирую транзакцию в методе End и удаляю массовую копию, транзакцию и т. д.
Когда я пытаюсь сбросить записи, я получаю эту ошибку:
Нарушение ограничения PRIMARY KEY 'PK_Sales'.Невозможно вставить дубликат ключа в объект 'dbo.Sales'.Значение ключа-дубликата равно (10364). \ R \ nОтношение завершено
У меня порядок столбцов такой же, как и порядок столбцов в таблице базы данных. Я даже выполнил оператор truncate и также выполнил этот оператор:
DBCC CHECKIDENT(dbo.Discrepancy, RESEED, 0);
Я получил такой вывод:
Checking identity information: current identity value '0'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Но все еще та же ошибка даже после выполнения выше.
Затем я попытался вставить запись из управления сервером sqlstudio и он был вставлен, но значение Id (pk) к моему удивлению: 10365
Структура таблицы продаж:
Id(pk) TestId(F.K) othercols
Примечание: Я установил AutoIncrement on my Id
столбец.
Код:
public class SaveRepo : IDisposable
{
DataTable dataTable;
SqlConnection connection;
string connectionString;
SqlTransaction transaction;
SqlBulkCopy bulkCopy;
int testId,
public SaveRepo (int testId)//testId=10364
{
this.connectionString = connectionString;
dataTable = new DataTable();
connection = new SqlConnection(connectionString);
connection.Open();
transaction = connection.BeginTransaction();
bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, transaction);
bulkCopy.DestinationTableName = "dbo.Sales";
this.testId = testId;
dataTable.Columns.Add("TestId", typeof(int));
}
void Dump()
{
bulkCopy.WriteToServer(dataTable);
}
public void End()
{
transaction.Commit();
//dispose the stuffs also
}
}
Я искал эту проблему, и большинство решений вращалось вокруг установки Id в Autoincrement, который у меня уже есть на моемколонка, поэтому я не понимаю, в чем проблема.
Я буду признателен за любую помощь:)