Как я могу переназначить значение первичного ключа с автоинкрементом? - PullRequest
3 голосов
/ 29 марта 2012

Можно ли установить значение поля автоинкремента?Если запись удалена с первичным ключом 5, но текущий счетчик автоинкремента равен 10, есть ли способ повторно вставить эту запись с ее первичным ключом, который все еще остается в 5 (вместо 11)?Я пытаюсь сделать это с Entity Framework 4.1 в C #.

Ответы [ 4 ]

5 голосов
/ 29 марта 2012

Я думаю, вы также можете использовать

Set Identity_Insert TableName ON 
 Update your Id value
Set Identity_Insert TableName OFF
2 голосов
/ 29 марта 2012

Цитируется из Том Хей :

Вы можете удалить столбец первичного ключа и создать его заново.Все идентификаторы будут переназначены, я полагаю, в том порядке, в котором были вставлены строки.

Однако я не уверен, почему вы хотите это сделать, особенно если у вас есть другие таблицы, которые содержатвнешний ключ к этой таблице.Если это так, вам также необходимо обновить эти поля, и в этом случае удаление и воссоздание столбца не будет хорошим решением.Вместо этого можно переименовать столбец, удалить свойство autoinc / primary key, а затем создать новый столбец autoinc первичного ключа.Тогда у вас будут старые и новые идентификаторы, которые вы можете использовать для обновления таких внешних ключей.

1 голос
/ 29 марта 2012

Вы можете отключить идентификационную спецификацию .Ваш первичный ключ останется без изменений, но вы можете вставить новую запись с выбранным вами идентификатором.После того, как вы вставили запись, вы хотели бы снова включить идентификационную спецификацию.

0 голосов
/ 29 марта 2012

Хотя здесь было несколько хороших предложений, я пришел к выводу о нескольких вещах, работая над решением этого вопроса. Раскрытие, что база данных была MySQL, возможно, помогло бы здесь, но я не понимал, что тогда разница будет настолько существенной. На самом деле, в MySql нет блокировки на вставку в первичный ключ с автоинкрементом. В результате этот код работает для вставки записи с первичным ключом, который меньше текущего значения индекса автоинкремента:

        var sql = @"INSERT INTO Work (
            WorkId ,
            LotId ,
            Description ,
            )
            VALUES (
            '5',  '5', 'This Works'
            );";
        using (var db = new Context())
        {
            db.Database.ExecuteSqlCommand(sql);
        }

Правильная вставка записи с индексом 5, даже если текущий счетчик автоматического приращения равен 11.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...