/*
@@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')
返回指定作用对象的标识值
@@IDENTITY,SCOPE_IDENTITY,IDENT_CURRENT
原创JeesonHuang 博主文章分类:SQLServer 体系结构 ©著作权
©著作权归作者所有:来自51CTO博客作者JeesonHuang的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
@@IDENTITY,IDENT_CURRENT,SCOPE_IDENTITY,IDENT_INCR,IDENT_SEED详解
@@IDENTITY 返回最后插入的标识值的系统函数。IDENT_CURRENT( 'table_name' ) 返回为指定的表或视图生成的最后一个标识值。所生成的最后一个标识值可以针对任何会话和任何作用域。SCOPE_IDENTITY 返回插入到同一作用域中的标识列内的最后一个标识值。一个范围是一个模块:存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或
IDENTITY SCOPE_IDENTITY IDENT_CURRENT IDENT_INCR IDENT_SEED