0

自動インクリメントが1に設定されたcustomer_masterと呼ばれる列を含むというテーブルが1つあります。cust_id

cust_idレコードを挿入しようとすると、正常に機能し、1、2、3、4などの挿入されたレコードが挿入されますが、挿入コマンドでエラーが生成された場合、トランザクションロールバックを実行します。これは、 cust_id5が挿入されていないことを意味しますが、別のレコードを挿入し、cust_id6を生成します。5をスキップしますcust_id

挿入コマンドでエラーが発生した場合にIDがインクリメントされないように設定したいと思います。

C#とSQLServer2005を使用しています。

4

2 に答える 2

1

SQL Server がこれを行う理由は、効率のためです。使用すべきではないギャップのないシーケンス番号がidentity必要な場合は、最初のトランザクションがロールバックした場合に備えて、同時トランザクションが次の値を待ってブロックされる独自のスキームを実装する必要があります。

ここでの 2 番目のクエリは、その目的で使用できます。しかし、これは本当に必要ですか?それが純粋に審美的な目的である場合、私のアドバイスはそれについて心配しないことです!

于 2010-10-02T11:53:13.400 に答える
0

DBCC CHECKIDENTを使用して、挿入の失敗後に ID 列を再シードできます。

DBCC CHECKIDENT ( table_name, NORESEED )は、ID 列の現在の ID 値と現在の最大値を返します。

DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value )は、現在の ID 値を new_reseed_value に設定します。

于 2010-10-02T11:36:17.770 に答える