首页 > 其他分享 >@@IDENTITY,SCOPE_IDENTITY,IDENT_CURRENT

@@IDENTITY,SCOPE_IDENTITY,IDENT_CURRENT

时间:2023-01-10 21:41:40浏览次数:27  
标签:IDENT -- CURRENT 标识 table SCOPE IDENTITY




/*
@@IDENTITY
返回为当前会话的所有作用域中的任何表最后生成的标识值(返回最后执行对象的标识值)


SCOPE_IDENTITY()
返回为当前会话和当前作用域中的任何表最后生成的标识值(返回语句作用在当前对象的标识值)

IDENT_CURRENT('object')
返回为任何会话和任何作用域中的特定表最后生成的标识值(返回指定作用对象的标识值)

*/

IF OBJECT_ID('table_A') IS NOT NULL
DROP TABLE table_A
CREATE TABLE table_A
(
id INT IDENTITY PRIMARY KEY ,
col VARCHAR(10)
)

IF OBJECT_ID('table_B') IS NOT NULL
DROP TABLE table_B
CREATE TABLE table_B
(
id INT IDENTITY PRIMARY KEY ,
col VARCHAR(10)
)

--触发器,插入table_A后,自动插入table_B
IF OBJECT_ID('TR_A') IS NOT NULL
DROP TRIGGER TR_A
GO
CREATE TRIGGER TR_A
ON table_A
FOR INSERT
AS
BEGIN
INSERT INTO table_B SELECT 'trigger'
END


select * from table_A
select * from table_B
--未插入数据时
SELECT @@IDENTITY --null
SELECT SCOPE_IDENTITY() --null
SELECT IDENT_CURRENT('table_A') --1
SELECT IDENT_CURRENT('table_B') --1


--插入table_B(table_B.id=1)
INSERT INTO table_B SELECT 'A'
--结果
SELECT @@IDENTITY --1
SELECT SCOPE_IDENTITY() --1
SELECT IDENT_CURRENT('table_A') --1
SELECT IDENT_CURRENT('table_B') --1


--插入table_A(table_A.id=1),触发后再插入table_B(table_B.id=2)
INSERT INTO table_A SELECT 'A'
--结果
SELECT @@IDENTITY --2
SELECT SCOPE_IDENTITY() --1
SELECT IDENT_CURRENT('table_A') --1
SELECT IDENT_CURRENT('table_B') --2

--简单地讲,就是这样
@@IDENTITY
返回最后执行对象的标识值

SCOPE_IDENTITY()
返回执行语句作用对象的标识值

IDENT_CURRENT('object')
返回指定作用对象的标识值





标签:IDENT,--,CURRENT,标识,table,SCOPE,IDENTITY
From: https://blog.51cto.com/hzc2012/6000698

相关文章