Как программно изменить значения столбца идентификаторов? - PullRequest
158 голосов
/ 15 апреля 2009

У меня есть база данных MS SQL 2005 с таблицей Test со столбцом ID. ID - это столбец идентификаторов.

У меня есть строки в этой таблице, и все они имеют соответствующие ID автоматически увеличенные значения.

Теперь я хотел бы изменить каждый идентификатор в этой таблице следующим образом:

ID = ID + 1

Но когда я делаю это, я получаю ошибку:

Невозможно обновить идентификатор столбца 'ID'.

Я пробовал это:

    ALTER TABLE Test NOCHECK CONSTRAINT ALL 
    set identity_insert ID ON

Но это не решает проблему.

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

Ответы [ 13 ]

1 голос
/ 15 апреля 2009

Изменение идентичности может завершиться неудачей в зависимости от ряда факторов, в основном вращающихся вокруг объектов / отношений, связанных со столбцом id. Похоже, что дизайн БД так же важен, как и ID, если они вообще меняются, редко, если они меняются (я уверен, что у вас есть свои причины и вы делаете изменения). Если вам действительно нужно время от времени менять идентификаторы, я бы предложил создать новый столбец фиктивных идентификаторов, который не является первичным ключом / автономным номером, которым вы можете управлять самостоятельно и генерировать из текущих значений. С другой стороны, идея Кристоферса, приведенная выше, была бы моим другим предложением, если у вас возникли проблемы с разрешением вставки идентификационных данных.

Удачи

PS это не сбой, потому что последовательный порядок, в котором он выполняется, пытается обновить значение в списке до элемента, который уже существует в списке идентификаторов? хватаясь за соломинку, возможно, добавьте количество строк + 1, затем, если это сработает, вычтите количество строк: -S

0 голосов
/ 27 июля 2016

Очень хороший вопрос, сначала нам нужно на IDENTITY_INSERT для конкретной таблицы, после этого выполнить запрос вставки (необходимо указать имя столбца).

Примечание: После редактирования столбца идентификаторов не забудьте отключить IDENTITY_INSERT. Если вы этого не сделали, вы не сможете изменить столбец идентификации для любой другой таблицы.

SET IDENTITY_INSERT Emp_tb_gb_Menu ON
     INSERT Emp_tb_gb_Menu(MenuID) VALUES (68)
SET IDENTITY_INSERT Emp_tb_gb_Menu OFF

http://allinworld99.blogspot.com/2016/07/how-to-edit-identity-field-in-sql.html

0 голосов
/ 18 сентября 2012

Я увидел хорошую статью, которая помогла мне в последний момент ... Я пытался вставить несколько строк в таблицу, в которой был столбец идентификаторов, но сделал это неправильно и пришлось удалить обратно. Как только я удалил строки, мой столбец идентификаторов изменился. Я пытался найти способ обновить столбец, который был вставлен, но - не повезло. Итак, при поиске в гугле нашел ссылку ..

  1. Удалил неправильно вставленные столбцы
  2. Использовать принудительную вставку, используя идентификацию вкл / выкл (объяснено ниже)

http://beyondrelational.com/modules/2/blogs/28/posts/10337/sql-server-how-do-i-insert-an-explicit-value-into-an-identity-column-how-do-i-update-the-value-of-an.aspx

...