1

MSDNによると、@@IDENTITY returns the last identity value generated for any table in the current session, across all scopes.

この機能が便利な状況に遭遇した人はいますか?すべてのスコープのテーブルに対して最後のIDを生成したい場合や、それをどのように使用するかを考えることはできません。

アップデート:

すべての反対票が何であるかはわかりませんが、私は自分が何を求めているのかを明確にしようと思ったのです。

まず、SCOPE_IDENTITYとIDENT_CURRENTをいつ使用するかを知っています。私が疑問に思っているのは、これらの他のオプションとは対照的に、@@ IDENTITYを使用する方が良いのはいつですか?私はまだ日常の仕事でそれを使用する場所を見つけていません、そしてそれが最良の選択肢であるときに誰かが状況を説明できるかどうか疑問に思っています。

ほとんどの場合、それは誰かが彼らが何をしていたのか理解していないためですが、Microsoftが理由でそれを含めたと思います。

4

2 に答える 2

3

一般的には、使用すべきではありません。SCOPE_IDENTITY()を使用する方がはるかに安全です (上記のコメントで強調表示されているように、単一行の挿入について話している限り)。ただし、次のシナリオを除き@@IDENTITYます。使用できるアプローチの 1 つ (SCOPE_IDENTITY()この場合は使用できません):

  • あなたのコードは故意にトリガーを起動します
  • トリガーは、ID 列を持つテーブルに挿入します
  • 呼び出しコードには、トリガー内で生成された ID 値が必要です
  • 呼び出しコードは、トリガー内で生成された値が別のテーブルを反映するように変更されないことを保証できます (たとえば、誰かが、依存していた挿入の@@IDENTITYにトリガーにログを追加します)。

これは奇妙な使用例ですが、実現可能です。

IDENTITY複数の行を挿入し、複数の値を戻す必要がある場合、これは機能しないことに注意してください。他の方法もありますが、カーソルからの結果セットを許可するオプションも必要であり、IIRC ではこのオプションは推奨されていません。

于 2012-07-06T15:44:03.980 に答える
-2

@@IDENTITY は、ID 列に基づいて個々の行を識別するのに優れています。

ID | Name | Age
1    AA     20
2    AB     30 
etc...

この場合、ID 列は @@IDENTITY プロパティに依存します。

于 2012-07-06T15:40:05.070 に答える