2009-07-29 104 views
0

自动递增主键是否受人为限制限制?例如,如果我只希望整数主键来自特定的整数范围,比如说在100到999之间,并且自动递增,那么这是可能的吗?如果是这样,在哪个数据库服务器软件上。我主要对MS SQL Server 2000或更高版本感兴趣,但其他人可能会很有兴趣知道。是否可以使用人为限制限制自动递增主键?

回答

3

是的,你可以用一个标识列和检查约束,做到这一点:

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 

如果你不希望的rowid之间没有任何间隙,它变得更复杂一点。

0

尝试把检查约束对表,以确保主键是有效的:

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

更改“MyTable的”你的表名,“MyPrimaryKeyConstraint”你会喜欢的任何描述性的名称,和“的PrimaryKey”到主键的列名称。

+0

使用BETWEEN可能会更容易阅读:“CHECK(PrimaryKey BETWEEN 100 AND 999)” – SqlRyan 2009-07-29 16:26:10

0

您可以使用DBCC CHECKIDENT(<tablename>, RESEED, <newstart>)更改起始值;您可以使用普通的CHECK约束来限制上限。

2

确定您可以如上所示做到这一点,但请注意,范围越小,越可能达到无法将数据放入表格的点,因为已达到范围。并且记住每个回退的事务或已删除的记录占用了该范围的一部分。在采取这样的步骤之前,我会非常认真地考虑一下,或者至少给它的范围远远大于表中所有可能的记录数。

0

请记住,IDENTITY列可以在数字序列中有空位。未使用的号码不会自动重复使用。所以100到999的范围并不意味着你的桌子将准许900行 - 它可能比那少一些。

相关问题