オートナンバーの使用に本質的な問題はありませんが、使用しない理由がいくつかあります。それでも、dacracot が述べたように、独自のソリューションを展開することは最善のアイデアではありません。説明させてください。
各テーブルでオートナンバーを使用しない最初の理由は、複数のテーブルのレコードをマージする可能性があることです。Sales Order テーブルとその他の種類の注文テーブルがあり、いくつかの共通データを取り出して、複数のテーブル継承を使用することにしたとします。グローバルに一意な主キーがあると便利です。これは bobwienholt がデータベースのマージについて述べたことと似ていますが、データベース内で発生する可能性があります。
第二に、他のデータベースはこのパラダイムを使用しておらず、Oracle のシーケンスなどの他のパラダイムの方がはるかに優れています。幸いなことに、SQL Server を使用して Oracle シーケンスを模倣することができます。これを行う 1 つの方法は、データベース全体に対して、MainSequence などと呼ばれる単一の AutoNumber テーブルを作成することです。データベース内の他のテーブルは autonumber を使用しませんが、自動的に生成された主キーが必要な人は MainSequence を使用してそれを取得します。このようにして、dacracot が話していたビルトイン パフォーマンス、ロック、スレッド セーフなどを、自分でビルドすることなくすべて取得できます。
もう 1 つのオプションは、主キーに GUID を使用することですが、人間 (開発者でさえも) が決してそれらを読み取らないと確信していても、誰かがおそらく読み取り、それは難しいため、お勧めしません。さらに重要なことに、T-SQL では暗黙的に int にキャストするのは非常に簡単ですが、暗黙的に GUID にキャストする際に多くの問題が発生する可能性があります。基本的に不便です。
新しいシステムを構築する場合は、主キー生成専用のテーブルを使用することをお勧めします (Oracle シーケンスと同様)。既存のデータベースの場合、わざわざ変更するつもりはありません。