IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。
IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值
SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。
SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。
但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。
稍微解释一下吧
1 @@IDENTITY 返回的是在当前操作下影响到的自增长列的值,比如我插入A表后触发在B表中插入一条记录,
1 @@IDENTITY 返回的是在当前操作下影响到的自增长列的值,比如我插入A表后触发在B表中插入一条记录,
而且2表都有自增列,那么它将返回B表自增列的值
2 SCOPE_IDENTITY() 只返回我们操作的表的自增列的值
3 IDENT_CURRENT('表名')你想要获取哪个受影响的表的自增列都可以
2 SCOPE_IDENTITY() 只返回我们操作的表的自增列的值
3 IDENT_CURRENT('表名')你想要获取哪个受影响的表的自增列都可以
例子:
if object_id('TZ') is not null
drop table TZ
if object_id('TY') is not null
drop table TY
if object_id('Ztrig') is not null
drop trigger TZ
go
CREATE TABLE TZ (
Z_id int IDENTITY(1,1)PRIMARY KEY,
Z_name varchar(20) NOT NULL)
INSERT TZ
VALUES ('Lisa')
INSERT TZ
VALUES ('Mike')
INSERT TZ
VALUES ('Carla')
go
CREATE TABLE TY (
Y_id int IDENTITY(100,1)PRIMARY KEY,
Y_name varchar(20) NULL)
INSERT TY (Y_name)
VALUES ('boathouse')
INSERT TY (Y_name)
VALUES ('rocks')
INSERT TY (Y_name)
VALUES ('elevator')
go
CREATE TRIGGER Ztrig
ON TZ
FOR INSERT
AS
BEGIN
INSERT TY VALUES ('aaa')
END
go
INSERT TZ VALUES ('Rosalie')
select * from TZ
select * from TY
SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]
SELECT @@IDENTITY AS [@@IDENTITY]
select IDENT_CURRENT('TZ') as [IDENT_CURRENT]
drop table TZ
if object_id('TY') is not null
drop table TY
if object_id('Ztrig') is not null
drop trigger TZ
go
CREATE TABLE TZ (
Z_id int IDENTITY(1,1)PRIMARY KEY,
Z_name varchar(20) NOT NULL)
INSERT TZ
VALUES ('Lisa')
INSERT TZ
VALUES ('Mike')
INSERT TZ
VALUES ('Carla')
go
CREATE TABLE TY (
Y_id int IDENTITY(100,1)PRIMARY KEY,
Y_name varchar(20) NULL)
INSERT TY (Y_name)
VALUES ('boathouse')
INSERT TY (Y_name)
VALUES ('rocks')
INSERT TY (Y_name)
VALUES ('elevator')
go
CREATE TRIGGER Ztrig
ON TZ
FOR INSERT
AS
BEGIN
INSERT TY VALUES ('aaa')
END
go
INSERT TZ VALUES ('Rosalie')
select * from TZ
select * from TY
SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]
SELECT @@IDENTITY AS [@@IDENTITY]
select IDENT_CURRENT('TZ') as [IDENT_CURRENT]