2009-07-29 111 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行 - 它可能比那少一些。

相關問題