2009-07-29 9 views
0

自動増分プライマリキーを人為的な制限で制限することはできますか?たとえば、整数プライマリキーが特定の範囲の整数、たとえば100から999までの範囲内で、自動インクリメントであることを希望する場合は可能ですか?もしそうなら、どのデータベースサーバーソフトウェアで。私は主にMS SQL Server 2000以上に興味がありますが、他の人は興味深いかもしれません。人為的な制限で自動インクリメントの主キーを制約することはできますか?

答えて

3

はいあなたはID列、チェック制約でそれを行うことができます。あなたがたROWIDの間に隙間をしたくない場合は

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 

、それはもう少し複雑になります。

0

主キーが有効であることを確認するために、テーブルの上にチェック制約を入れてみてください:

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

ご希望のどんなわかりやすい名前に自分のテーブル名に変更し、「MyTableという」、「MyPrimaryKeyConstraint」、および「主キー」主キーの列名に追加します。

+0

BETWEENを使用すると、読みやすくなります。「CHECK(Primary 100 BETWEEN 100 AND 999)」 – SqlRyan

0

DBCC CHECKIDENT(<tablename>, RESEED, <newstart>)を使用して開始値を変更できます。通常のCHECK制約を使用して上限を制限することができます。

2

OKこれは上記のように行うことができますが、範囲が小さいほど、範囲に達するとデータがテーブルに格納されない可能性が高いことに注意してください。ロールバックされたすべてのトランザクションまたは削除されたレコードが範囲の一部を占めることを忘れないでください。私は非常に真剣にこのようなステップを取る前に、または少なくともそれはあなたがテーブルに持っているレコードの任意の可能な数よりもはるかに大きな範囲を与えると思うだろう。

0

IDENTITY列には数字のシーケンスにギャップがあることに注意してください。未使用の番号は自動的には再利用されません。したがって、100〜999の範囲は、テーブルが正確に900行を許可するという意味ではありません。

関連する問題