IDENTITY
ograniczenie nie mogą być dodawane do istniejącej kolumny, tak jak dodasz to musi być twoja początkowa myśl. Istnieją dwie opcje:
- Utwórz nową tabelę zawierającą klucz podstawowy z tożsamością i upuść istniejącej tabeli
- Utwórz nowy klucz podstawowy kolumny tożsamości i upuść istniejącej kolumny „p_id”
Istnieje trzecia droga, która jest lepszym podejściem do bardzo dużych tabel za pośrednictwem oświadczenia ALTER TABLE...SWITCH
. Zobacz Adding an IDENTITY
to an existing column dla każdego z nich. W odpowiedzi na to pytanie, jeśli tabela nie jest zbyt duży, polecam uruchamiając następujące:
-- Check that the table/column exist and no primary key is already on the table.
IF COL_LENGTH('PERSONS','P_ID') IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'PRIMARY KEY' AND TABLE_NAME = 'PERSONS')
-- Add table schema to the WHERE clause above e.g. AND TABLE_SCHEMA ='dbo'
BEGIN
ALTER TABLE PERSONS
ADD P_ID_new int IDENTITY(1, 1)
GO
ALTER TABLE PERSONS
DROP COLUMN P_ID
GO
EXEC sp_rename 'PERSONS.P_ID_new', 'P_ID', 'Column'
GO
ALTER TABLE PERSONS
ADD CONSTRAINT PK_P_ID PRIMARY KEY CLUSTERED (P_ID)
GO
END
Uwagi: jawnie za pomocą słowa kluczowego CONSTRAINT
klucz podstawowy ograniczenia podano konkretnej nazwy zamiast w zależności od SQL Server, aby automatycznie przypisać nazwę.
Dołączać tylko CLUSTERED
na PRIMARY KEY
, jeśli saldo wyszukiwania określonego P_ID i ilość zapisu przewyższają korzyści wynikające z grupowania tabeli przez jakiś inny indeks. Zobacz Create SQL IDENTITY
as PRIMARY KEY
.
należy oznaczyć jedną odpowiedź jako zaakceptowaną. –