0

ID 列を持つ既存のテーブルと、ID 列の値と一致することを保証する制約を持つ列があります。
(デザインが良くないのは承知の上ですが、今は変えられない古いテーブルです)

IDENT_CURRENT('mytable') を挿入中に値として使用して、新しく作成された ID 値を他の列 (FakeID) に入れることができることを知っています。

INSERT INTO MyTable (FakeID)
SELECT IDENT_CURRENT('MyTable')

これには複数のレコードを挿入するときに問題があることがわかりましたが、この用途では単一のレコードのみを挿入しています。

私の質問は、これを使用するのにどれくらい安全ですか?
主に、異なるセッションまたは異なるスコープで行われた挿入によるリスクはありますか? また、テーブルが切り捨てられた場合、これは期待どおりに動作しますか?

他の提案は大歓迎です。

4

1 に答える 1

0

ここでは SCOPE_IDENTITY() がより安全な賭けになるでしょう。トランザクションのこの部分が実行される前に誰かがテーブルに挿入すると、IDENT_CURRENT は他のトランザクションから新しく生成された ID を取得します。

したがって、変数を宣言し、その値を SCOPE_IDENTITY() に設定すると、次のようになります。

DECLARE @Id INT
SET @Id = SCOPE_IDENTITY()

INSERT INTO MyTable (FakeID) 
SELECT @Id

同様の問題に関するいくつかの投稿を次に示します。

http://bytes.com/topic/sql-server/answers/471026-ident_current-problem 現在のセッションに相当する IDENT_CURRENT

于 2013-10-31T15:02:23.163 に答える