W chwili gdy jest założona tabela a trzeba dodać do wybranego pola właściwość IDENTITY należy jedynie założyć taką tabelę od nowa. Nie ma możliwości dodania właściwości IDENTITY poprzez ALTER TABLE.

Rozwiązaniem powyższego problemu jest utworzenie od nowa tabeli z prawidłową strukturą. Należy pamiętać  o zrobieniu kopii tabeli.

Należy wykonać następujące czynności:

  1. Usuwamy wszystkie powiązania do tabeli.
  2. Zawsze sprawdzamy (TAKI NAWYK!!!) czy istnieje tabela tymczasowa. Jeżeli tak to ją kasujemy.
  3. Tworzymy tabelę tymczasową i kasujemy naszą właściwą tabelę (wcześniej radziłbym zrobić jej kopie)
  4. Tworzymy strukturę nowej tabeli z IDENTITY
  5. Dopisujemy dane i sprzątamy po sobie kasując tabelę tymczasową.

Poniżej przedstawiono przykładowy kod:

-- Drop temp table if they already exist
IF OBJECT_ID('TempDB..#Test', 'U') IS NOT NULL DROP TABLE #Test;

-- Create the temp table
SELECT * INTO #Test FROM [dbo].[TEST]
DROP TABLE [dbo].[TEST]

CREATE TABLE [dbo].[TEST](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [test] [varchar](11) NULL,
 CONSTRAINT [PK_TEST] PRIMARY KEY CLUSTERED
(
    [id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET IDENTITY_INSERT [dbo].[TEST] ON

INSERT INTO [dbo].[TEST] (id, test)
    SELECT id, test
    FROM #Test

SET IDENTITY_INSERT [dbo].[TEST] OFF

IF OBJECT_ID('TempDB..#Test', 'U') IS NOT NULL DROP TABLE #Test;

Dariusz Brejnak

Od prawie trzydziestu lat jest pasjonatem informatyki, a zwłaszcza dziedzin dotyczących baz danych, hurtowni danych oraz ogólnie rozumianej tematyki BI. Jego druga pasja to fotografia http://dariuszbrejnak.pl