对有insert触发器表取IDENTITY值时发现的问题
赶快查了下msdn,原来@@IDENTITY还有这么多讲究
问题是这样的:T1表上有一个INSERT的触发器,在插入数据的时候,会自动往T2表里面插一条记录
这样当我在T1表上插入新的数据时,取@@IDENTITY的时候,返回的id值是T2表里面的新记录的值
赶快查了下msdn,原来@@IDENTITY还有这么多讲究:
在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值。如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL。如果插入了多个行,生成了多个标识值,则 @@IDENTITY 将返回最后生成的标识值。如果语句触发了一个或多个触发器,该触发器又执行了生成标识值的插入操作,那么,在语句执行后立即调用 @@IDENTITY 将返回触发器生成的最后一个标识值。如果对包含标识列的表执行插入操作后触发了触发器,并且触发器对另一个没有标识列的表执行了插入操作,则 @@IDENTITY 将返回第一次插入的标识值。出现 INSERT 或 SELECT INTO 语句失败或大容量复制失败,或者事务被回滚的情况时,@@IDENTITY 值不会恢复为以前的设置。
如果语句和事务失败,它们会更改表的当前标识,从而使标识列中的值出现不连贯现象。即使未提交试图向表中插入值的事务,也永远无法回滚标识值。例如,如果因 IGNORE_DUP_KEY 冲突而导致 INSERT 语句失败,表的当前标识值仍然会增加。
@@IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 是相似的函数,因为他们都返回插入到表的 IDENTITY 列的最后一个值。
@@IDENTITY 和 SCOPE_IDENTITY 可以返回当前会话中的所有表中生成的最后一个标识值。但是,SCOPE_IDENTITY 只在当前作用域内返回值,而 @@IDENTITY 不限于特定的作用域。
IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 可以返回任何会话和任何作用域中为特定表生成的标识值。
@@IDENTITY 函数的作用域是执行该函数的本地服务器上的当前会话。此函数不能应用于远程或链接服务器。若要获得其他服务器上的标识值,请在远程服务器或链接服务器上执行存储过程,并使(在远程或链接服务器的环境中执行的)该存储过程收集标识值,并将其返回本地服务器上的发出调用的连接。
所以对多个表进行操作的时候,最好用
SELECT SCOPE_IDENTITY()和SELECT IDENT_CURRENT(‘T1')方式

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PowerPoint でクリックする前にテキストを非表示にする方法 PowerPoint スライド上の任意の場所をクリックしたときにテキストを表示したい場合、設定はすばやく簡単です。 PowerPoint でボタンをクリックする前にテキストを非表示にするには: PowerPoint ドキュメントを開き、[挿入] メニューをクリックします。 「新しいスライド」をクリックします。 [空白] または他のプリセットのいずれかを選択します。 [挿入] メニューで [テキスト ボックス] をクリックします。テキスト ボックスをスライド上にドラッグします。テキストボックスをクリックして、あなたの名前を入力してください

SQL における Identity とは何ですか? 具体的なコード例が必要です。SQL では、Identity は自動インクリメント数値の生成に使用される特別なデータ型です。多くの場合、テーブル内のデータの各行を一意に識別するために使用されます。 Identity 列は、各レコードが一意の識別子を持つようにするために、主キー列と組み合わせてよく使用されます。この記事では、Identity の使用方法といくつかの実用的なコード例について詳しく説明します。 Identity の基本的な使用方法は、テーブルを作成するときに Identity を使用することです。

insertignore、insert、replace 命令がすでに存在するかどうかの違い 挿入エラーの例 Insertintonames(name,age)values("Xiao Ming", 23); insertignore は insertignoreintonames(name, age)values("Xiao Ming", 24); replace 置換して挿入 replaceintonames(name,age)values("Xiao Ming", 25); テーブル要件: PrimaryKey、または一意のインデックス結果: テーブル ID は自動的にインクリメントされます。テスト コードはテーブルを作成します。

PHP を使用して MySQL にトリガーを記述する方法 MySQL は一般的に使用されるリレーショナル データベース管理システムであり、PHP は一般的なサーバーサイド スクリプト言語です。 PHP を使用して MySQL にトリガーを記述すると、データベース操作の自動化を実現できます。この記事では、PHP を使用して MySQL トリガーを作成する方法を紹介し、具体的なコード例を示します。開始する前に、MySQL と PHP がインストールされ、対応するデータベース テーブルが作成されていることを確認してください。 1. PHPファイルとデータを作成する

Oracle データベースでは、CREATE TRIGGER ステートメントを使用してトリガーを追加できます。トリガーは、データベース テーブルに 1 つ以上のイベントを定義し、イベントの発生時に対応するアクションを自動的に実行できるデータベース オブジェクトです。

指定した位置に文字列を挿入するには、Java の StringBuilder.insert() 関数を使用します。StringBuilder は、可変文字列を処理するために使用される Java のクラスです。文字列を操作するためのさまざまなメソッドが提供されます。insert() 関数は、文字列を次の位置に挿入するために使用されます。指定された位置. 文字列を位置的に挿入する一般的な方法の 1 つ。この記事では、insert()関数を使用して指定した位置に文字列を挿入する方法と、対応するコード例を紹介します。入れる()

PHP を使用して MySQL でカスタム トリガーとストアド プロシージャを作成する方法 はじめに: アプリケーションを開発するとき、多くの場合、データの挿入、更新、削除など、データベース レベルでいくつかの操作を実行する必要があります。 MySQL は広く使用されているリレーショナル データベース管理システムであり、PHP は一般的なサーバー側スクリプト言語です。この記事では、PHP を使用して MySQL でカスタム トリガーとストアド プロシージャを作成する方法を紹介し、具体的なコード例を示します。 1. トリガーおよびストアド プロシージャ トリガー (Trigg

今日の Web 開発時代では、特にデータ量の多い Web アプリケーションを扱う場合、効果的かつ効率的なテーブル管理が非常に重要になっています。テーブルの行を動的に追加、編集、削除できる機能により、ユーザー エクスペリエンスが大幅に向上し、アプリケーションがよりインタラクティブになります。これを達成する効果的な方法は、jQuery の機能を活用することです。 jQuery は、開発者が操作を実行するのに役立つ多くの機能を提供します。テーブルの行 テーブルの行は、相互に関連するデータのコレクションであり、HTML の要素で表されます。これは、テーブル内のセル (要素で表される) をグループ化するために使用されます。各要素はテーブル内の行を定義するために使用され、複数属性テーブルの場合、通常は 1 つ以上の要素が含まれます。構文$(セレクター).append(co
