/*
@@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')
返回指定作用对象的标识值