2009-05-29 14 views
1

私は少し私のトリガーと錆び、何じゃないとクラスのため、この問題を把握しようとしています使用しないアイデンティティ機能の回避策:データベースTESTでSQL:トリガー

を、テーブルはオプションがありません。 IDENTITY機能のつまり、「Users」という表に行を挿入すると、主キー「UserID」が自動インクリメントになります。このような組み込み機能なしでこの機能を実装するには、回避策を提案してください。 (ヒント:関数、ストアドプロシージャ、シーケンス、トリガなどを使用することがあります)

+0

宿題タグの追加はどうですか? – Mathias

答えて

0

シーケンスを使用していますが、これはOracleとはよく似ています。 ID列これは宿題なので、残りの部分をここから理解できるようにします。

1

IDと呼ばれるテーブルの主キーにInt列を使用します。

次に、[挿入トリガー]の代わりに[挿入]を使用して、IDに挿入する値を入力/計算できます。

トリガーでは、テーブルの最大IDがTableAから選択されたMAX IDを使用して決定され、挿入するレコードごとに1ずつ増加します。

テーブルにレコードがない場合、ID値は1です。

+1

ここでは、トランザクション分離モードが重要であることに注意することが重要です。通常のREAD COMMITTED分離レベルを使用している場合、2つのプロセスが同じIDを生成する可能性があります。実際にはBad Thingとなります。したがって、トリガー内でSERIALIZABLE分離レベルを使用する必要があります。そうしないと、問題が発生する可能性があります。または、もっと良いことに、それを完全に避けてIDを使用してください;-) –

+0

@Dave +1:考慮すべき非常に重要なポイントです。 –