3

アプリケーションの特定のユースケースで次に利用可能な一意の番号を維持するためのテーブルがあります。インクリメントされ、次に使用可能な番号を提供する bigint 型の列を持つことを考えました。この列を ID 列にして自動インクリメントを同じ行にすることは可能ですか?

単一の列 (ID) を持つテーブルのスタックオーバーフローの使用に関するリンクを見つけましたか? 同様の要件があります。ただし、上記の解決策では、テーブルに新しいレコードが挿入されます。挿入する代わりに、同じレコードを更新して、次に利用可能な一意の番号を追跡したいと考えています。

ID 列機能を利用することは可能ですか、それとも現在の値を取得し、明示的にインクリメントして、同じ列の同じ行に戻す必要がありますか?

4

2 に答える 2

2

何を達成しようとしているのか完全にはわかりません。ieを追加した直後にあなたを信じてください

CREATE TABLE #Temp (rowName BIGINT IDENTITY(1,1) NOT NULL)

これにより、自動的に 1 ずつインクリメントされる rowName という列を持つテーブルが作成されます。

于 2013-01-29T14:16:25.950 に答える
1

ストアド プロシージャを作成してトランザクションを開始し、格納されている bigint (ID ではない) をインクリメントして新しい値を返し、問題が発生した場合はトランザクションをロールバックします。

SP の更新セクションは次のようになります(atm をテストできません):

DECLARE @RET TABLE (Value BigInt)

UPDATE Mytable
SET MyField += 1
OUTPUT inserted.MyField INTO @RET

IF (SELECT MAX(Value) FROM @RET) > 0
RETURN (SELECT MAX(Value) FROM @RET)

OUTPUT ステートメント

これにより、テーブルへの書き込みが 1 回だけ行われ、新しい値が返されます。値を確認すると、最後に発行された値が返されます。

于 2013-01-29T14:50:57.913 に答える