2013-07-19 2 views
3

Кто-то отключил столбец идентификатора таблицы в SQL DB. Можно ли снова включить эту функцию столбца, даже если в таблице уже есть данные? И поддерживать существующие значения идентичности?Включить столбец идентификации, в котором уже есть данные?

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

+4

Вы можете включить его в визуальный конструктор в SQL Server Mgmt Studio, но это действительно только создает таблицу с идентификатором IDENTITY, переименовывает старое имя, копирует данные , а затем удаляет старое имя. Это то, что вам нужно сделать и в T-SQL-скрипте, - нет никакого способа просто включить идентификатор 'IDENTITY' в существующий столбец –

+0

. См. Эту [ссылку] (http://stackoverflow.com/a/17200813/1563878), я разместил инструкцию insert с включением и отключением идентификатора. Также необходимо сбросить или изменить следующее значение идентификации ([link] (http://blog.sqlauthority.com/2007/03/15/sql-server-dbcc-reseed-table-identity-value-reset-table-identity /)). –

ответ

6

Вы не можете включитьIDENTITY на существующий столбец, это просто невозможно в SQL Server прямо сейчас (по крайней мере, до версии 2012).

Что вам нужно сделать, это именно то, что вы описали:

  • создать новую таблицу в структуре вы хотите, с в IDENTITY колонке
  • скопировать данные из существующей таблицы в новую стол с SET IDENTITY_INSERT ON
  • падения старой таблицы
  • переименовать новую таблицу со старым именем таблицы

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

3

Подобно тому, как * marc_s * сказал, что вы можете использовать

Я не знаю, есть ли другой способ сделать это, но вы можете использовать

CREATE TABLE tblNewTable 
    (
     //Put the columns and datatypes of the former table 
    ) 

    INSERT INTO tblNewTable 
    AS 
    SELECT * FROM oldTable 

Затем удаляем таблицу usng

DROP TABLE oldTable 

Затем заново создайте новый стол и добавьте его, затем используйте

INSERT INTO tblNewRecreatedTable (//Columns of the new created table except the column with the identity 
    AS 
    SELECT //Columns of the table you copied the data to except the Columned that you defined identity 

Надеюсь, это поможет