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

У меня есть таблица с идентификатором столбца, который является единичным. Затем я создаю новый неидентичный столбец new_ID и обновляю его значениями из ID столбца + 1. Например:

new_ID = ID + 1

Затем я опускаю столбец ID и переименовываю new_ID в имя «ID».

А как установить идентичность для этого нового столбца 'ID'?

Я бы хотел сделать это программно!

Ответы [ 5 ]

5 голосов
/ 16 апреля 2009

Насколько я знаю, вам нужно создать временную таблицу с полем ID, созданным как IDENTITY, а затем скопировать все данные из исходной таблицы. Наконец, вы отбрасываете исходную таблицу и переименовываете временную. Это пример таблицы ( TestTable ), которая содержит только одно поле с именем ID (целое число, не IDENTITY):

BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_TestTable
    (
    ID int NOT NULL IDENTITY (1, 1)
    )  ON [PRIMARY]
GO
SET IDENTITY_INSERT dbo.Tmp_TestTable ON
GO
IF EXISTS(SELECT * FROM dbo.TestTable)
     EXEC('INSERT INTO dbo.Tmp_TestTable (ID)
        SELECT ID FROM dbo.TestTable WITH (HOLDLOCK TABLOCKX)')
GO
SET IDENTITY_INSERT dbo.Tmp_TestTable OFF
GO
DROP TABLE dbo.TestTable
GO
EXECUTE sp_rename N'dbo.Tmp_TestTable', N'TestTable', 'OBJECT' 
GO
COMMIT
2 голосов
/ 16 апреля 2009

Похоже, что SQL Mobile поддерживает изменение идентичности столбцов, но в SQL Server 2005 не понравился пример из BOL.

Таким образом, вы можете создать новую временную таблицу со столбцом идентификаторов, а затем включить Identity Insert:

Create Table Tmp_MyTable ( Id int identity....)

SET IDENTITY_INSERT dbo.Tmp_Category ON

INSERT Into Tmp_MyTable (...)
Select From MyTable ....

Drop Table myTable

EXECUTE sp_rename N'dbo.Tmp_MyTable', N'MyTable', 'OBJECT' 

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

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

Думаю, вам не очень повезло с вашей задачей ....

В дизайне таблицы вы должны иметь возможность перейти в свойства и в разделе Изменение спецификации идентификации (Is Identity) установить значение Да и назначить первичный ключ столбца, если у него ранее был первичный ключ.

0 голосов
/ 16 апреля 2009

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

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

...