Pergunta

Pode uma chave primária auto-incremento ser restringida por limites artificiais? Por exemplo, se eu só quero inteiro chaves primárias para ser a partir de um intervalo específico de inteiros, digamos entre 100 e 999 inclusive, e auto-incremento, isso é possível? E se assim for, em que o software de servidor de banco de dados. Estou interessado principalmente no MS SQL Server 2000 ou superior, mas outros podem ser interessante saber de.

Foi útil?

Solução

Sim, você pode fazê-lo com uma coluna de identidade e uma restrição de verificação:

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 você não quer quaisquer lacunas entre as rowids, ele fica um pouco mais complexa.

Outras dicas

OK você pode fazer isso, como mostrado acima, mas esteja ciente de que quanto menor o intervalo, o mais provável que você será para chegar ao ponto onde os dados não podem ser colocados na mesa becasue o intervalo foi alcançado. E lembre-se cada transação de volta enrolada ou registro excluído ocupa parte da gama. Eu pensar muito seriamente antes de tomar esse passo um ou pelo menos dar-lhe uma gama muito maior do que qualquer possível número de registros que você nunca vai ter na tabela.

Tente colocar uma restrição de verificação na tabela para garantir a chave primária é válido:

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

Change "MyTable" para o seu nome de tabela "MyPrimaryKeyConstraint" para qualquer nome descritivo que você gostaria, e "PrimaryKey" para o nome da chave primária de coluna.

Você pode alterar o valor inicial usando DBCC CHECKIDENT (<tablename>, RESEED, <newstart>); Você pode restringir o intervalo superior, com uma restrição CHECK comum.

Tenha em mente que uma coluna de identidade pode ter lacunas na sequência de números. números não utilizados não são reutilizados automaticamente. Assim, uma gama de 100 a 999 não significa sua mesa permitirá exatamente 900 linhas -. Que poderia ser algo menos do que isso

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top