Domanda

Una chiave primaria a incremento automatico può essere vincolata da limiti artificiali? Ad esempio, se voglio solo che le chiavi primarie di numeri interi provengano da un intervallo specifico di numeri interi, diciamo tra 100 e 999 inclusi e l'incremento automatico, è possibile? E in tal caso, su quale software del server di database. Sono principalmente interessato a MS SQL Server 2000 o superiore, ma altri potrebbero essere interessanti da sapere.

È stato utile?

Soluzione

Sì, puoi farlo con una colonna di identità e un vincolo di controllo:

CREATE TABLE test(rowid int identity(100,1) primary key)
GO
ALTER TABLE test ADD CONSTRAINT CK_test_Range
    CHECK (rowid >= 100 AND rowid < 1000)
GO    
INSERT INTO test default values;
GO 900    
SELECT * FROM test
GO    
DROP TABLE test

Se non vuoi spazi vuoti tra i rowid, diventa un po 'più complesso.

Altri suggerimenti

OK, puoi farlo come mostrato sopra, ma tieni presente che minore è l'intervallo, maggiore sarà la probabilità di raggiungere il punto in cui non è possibile inserire dati nella tabella perché l'intervallo è stato raggiunto. E ricorda che ogni transazione ripristinata o record cancellato occupa parte dell'intervallo. Penserei molto seriamente prima di fare un passo del genere o almeno di dargli un intervallo molto maggiore di qualsiasi numero possibile di record che tu abbia mai avuto nella tabella.

Prova a mettere un vincolo di controllo sulla tabella per assicurarti che la chiave primaria sia valida:

ALTER TABLE MyTable
ADD CONSTRAINT MyPrimaryKeyConstraint
CHECK (PrimaryKey >= 100 AND PrimaryKey <= 999)

Modifica " MyTable " al nome della tua tabella, " MyPrimaryKeyConstraint " a qualunque nome descrittivo desideri e " PrimaryKey " al nome della colonna della chiave primaria.

Puoi cambiare il valore iniziale usando DBCC CHECKIDENT (< tablename > ;, RESEED, < newstart >) ; Puoi limitare l'intervallo superiore con un normale vincolo CHECK.

Tieni presente che una colonna IDENTITÀ può avere lacune nella sequenza di numeri. I numeri non utilizzati non vengono riutilizzati automaticamente. Quindi un intervallo da 100 a 999 non significa che la tua tabella consentirà esattamente 900 righe - potrebbe essere qualcosa di meno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top