SQL Server -- @@identity , SCOPE_IDENTITY,IDENT_CURRENT 三者的异同
@@identity , SCOPE_IDENTITY,IDENT_CURRENT 三者的异同http://blog.csdn.net/leshami/article/details/5181147
--=====================================================
--@@identity , SCOPE_IDENTITY,IDENT_CURRENT 三者的异同
--=====================================================
--1.@@IDENTITY:返回最后插入的标识值
IF OBJECT_ID('dbo.ta') IS NOT NULL
DROP TABLE dbo.ta;
CREATE TABLE dbo.ta
(
> Col VARCHAR(5)
);
INSERT INTO ta SELECT 'A'
INSERT INTO ta SELECT 'B'
INSERT INTO ta SELECT 'C'
SELECT @@IDENTITY AS> --Result :
Iden
--------------
3
IF OBJECT_ID('dbo.tb') IS NOT NULL
DROP TABLE dbo.tb;
CREATE TABLE dbo.tb
(
tb_id INT> tb_col VARCHAR(5)
);
--当触发器存在时, 返回被触发的表Identity列的值,不考虑任何作用域
IF OBJECT_ID('dbo.tr_ta') IS NOT NULL
DROP TRIGGER dbo.tr_ta
Go
CREATE TRIGGER tr_ta
ON dbo.ta
FOR INSERT
AS
BEGIN
INSERT INTO tb SELECT 'AA'
END
INSERT INTO ta SELECT 'D'
INSERT INTO ta SELECT 'E'
SELECT @@IDENTITY AS> --Result :
Iden
--------
2
--2.SCOPE_IDENTITY:返回当前作用域中的标识列内的最后一个标识值
INSERT INTO ta SELECT 'F'
SELECT @@IDENTITY AS ;
SELECT SCOPE_IDENTITY() AS ;
--Result:返回tb表中最后的Identity为3,当前作用域中最后的Identity为6,即表ta中最后的Identity为6
Identity
---------
3
(1 row(s) affected)
SCOPE_IDENTITY
----------
6
(1 row(s) affected)
--3.IDEN_CURRENT 返回指定的表或视图生成的最后一个标识值
INSERT INTO dbo.ta SELECT 'G'
SELECT @@IDENTITY AS ;
SELECT SCOPE_IDENTITY() AS ;
SELECT>
SELECT> --Result:
Identity
--------------
4
(1 row(s) affected)
SCOPE_IDENTITY
--------------
7
(1 row(s) affected)
IDENT_CURRENT_ta
--------------
7
(1 row(s) affected)
IDENT_CURRENT_tb
--------------
4
--打开新的一个会话,不执行任何插入,如下:
SELECT @@IDENTITY AS ;
SELECT SCOPE_IDENTITY() AS ;
SELECT>
SELECT> --Result:
Identity
---------------------------------------
NULL
(1 row(s) affected)
SCOPE_IDENTITY
---------------------------------------
NULL
(1 row(s) affected)
IDENT_CURRENT_ta
---------------------------------------
7
(1 row(s) affected)
IDENT_CURRENT_tb
---------------------------------------
4
总结:
共同点:三者都返回最后生成的标识值
不同点:各个函数的因作用域或会话的不同而返回不同的结果。
● @@IDENTITY 返回为跨所有作用域的当前会话中的某个表生成的最新标识值。
● SCOPE_IDENTITY 返回为当前会话和当前作用域中的某个表生成的最新标识值。
●>
页:
[1]