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

有帮助吗?

解决方案

是的,您可以使用标识列和检查约束来执行此操作:

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之间有任何差距,那就会有点复杂。

其他提示

好的,你可以按照上面的说明进行操作,但请注意,范围越小,越有可能达到无法将数据放入表中的点,因为已达到范围。并记住每个回滚事务或删除的记录占用了部分范围。在采取这样的步骤之前我会非常认真地考虑,或者至少给它一个范围远远超过你在表中所拥有的任何可能数量的记录。

尝试在表上设置检查约束以确保主键有效:

<代码>

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

<代码> 更改“MyTable”到您的表名,“MyPrimaryKeyConstraint”您想要的任何描述性名称,以及“PrimaryKey”到主键的列名。

您可以使用 DBCC CHECKIDENT (&lt; tablename&gt;,RESEED,&lt; newstart&gt;);您可以使用普通的CHECK约束限制上限范围。

请记住,IDENTITY列可能会在数字序列中出现间隙。未使用的数字不会自动重复使用。所以100到999的范围并不意味着你的桌子只允许900行 - 它可能比那些少。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top