-
创建数据库和表
create database MyDataBase
use MyDataBase
create table mytable
id int identity
(
1
,
1
),
name varchar
(
20
)
)
insert into mytable values
(
'
李四
'
)
select @@identity
三种方式的比较
sql Server 2000
中,有三个比较类似的功能
:
他们分别是
:ScopE_IDENTITY
、
IDENT_CURRENT
和
@@IDENTITY
,它们都返回插入到
IDENTITY
列中的值。
IDENT_CURRENT
返回为任何会话和任何作用域中的特定表最后生成的标识值。
IDENT_CURRENT
不受作用域和会话的限制,而受限于指定的表。
IDENT_CURRENT
返回为任何会话和作用域中的特定表所生成的值。
ScopE_IDENTITY
和
@@IDENTITY
返回在当前会话中的任何表内所生成的最后一个标识值。但是,
ScopE_IDENTITY
只返回插入到当前作用域中的值;
@@IDENTITY
不受限于特定的作用域。
例如,有两个表
T1
和
T2
,在
T1
上定义了一个
INSERT
触发器。当将某行插入
T1
时,触发器被激发,并在
T2
中插入一行。此例说明了两个作用域
:
一个是在
T1
上的插入,另一个是作为触发器的结果在
T2
上的插入。
ScopE_IDENTITY
()
返回插入
T1
中的
IDENTITY
值,该值是发生在相同作用域中的最后一个
INSERT
。如果在作用域中发生插入语句到标识列之前唤醒调用
ScopE_IDENTITY
()
函数,则该函数将返回
NULL
值。
而
IDENT_CURRENT
(
'T1'
)
和
IDENT_CURRENT
(
'T2'
)
返回的值分别是这两个表最后自增的值。
ajqc
的实验
:
(
40
条本地线程,
40
+
40
条远程线程同时并发测试,插入
1200W
行),得出的结论是
:
1.
在典型的级联应用中
.
不能用
@@IDENTITY
,在
CII850
,
256M
SD
的机器上
1W
多行时就会并发冲突
.
在
P42.8C
,
512M
DDR
上,才
6000
多行时就并发冲突
.
SELECT IDENT_INCR
(
'TableName'
)
--
返回指定表的标示字段增量值
SELECT IDENT_SEED
(
'TableName'
)
--
返回指定表的标示字段种子值
返回最后插入记录的自动编号
SELECT IDENT_CURRENT
(
'TableName'
)
SELECT IDENT_CURRENT
(
'TableName'
)
+
(
SELECT IDENT_INCR
(
'TableName'
))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。