|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
到2009年,甲骨文的数据库Oracle已经诞生了30周年,而MySQL却连它的一半时间都没有。微软的SQLServer仅仅比MySQL大两年,但是SQLServer的发布是建立在Sybase的基础上。server|函数IDENTITY(标识)列,也有良多人称之为自增列,在SQLServer2000中,标识列经由过程IDENTITY来界说,上面是与猎取最初拔出纪录的标识值有关的函数的一个示例申明
SQLServer中,可使用SCOPE_IDENTITY()、@@IDENTITY、IDENT_CURRENT()来获得最初拔出纪录的值值,它们的区分在于:
SCOPE_IDENTITY()前往拔出到统一感化域中的IDENTITY列内的最初一个IDENTITY值。一个感化域就是一个模块――存储历程、触发器、函数或批处置。因而,假如两个语句处于统一个存储历程、函数或批处置中,则它们位于不异的感化域中。
@@IDENTITY前往在以后会话的一切表中天生的最初一个标识值
IDENT_CURRENT()前往为任何会话和任何感化域中的指定表最初天生的标识值
上面以一个示例来讲明它们的区分
--a)示例代码
--===========================================
--创立测试表
--===========================================
USEtempdb
GO
CREATETABLEt1(idintIDENTITY,colint)
INSERTt1SELECT1
UNIONALLSELECT2
CREATETABLEt2(idintIDENTITY,colint)
GO
CREATETRIGGERTR_insert_t2ONt2
FORINSERT
AS
INSERTt1SELECT3
GO
--===========================================
--测试三个函数..1
--===========================================
INSERTt2VALUES(1)
SELECT[SCOPE_IDENTITY()]=SCOPE_IDENTITY(),
[@@IDENTITY]=@@IDENTITY,
[IDENT_CURRENT()Fort1]=IDENT_CURRENT(Nt1),
[IDENT_CURRENT()Fort2]=IDENT_CURRENT(Nt2)
/*--了局
SCOPE_IDENTITY()@@IDENTITYIDENT_CURRENT()Fort1IDENT_CURRENT()Fort2
-------------------------------------------------------------------------------
1331
(所影响的行数为1行)
--*/
GO
--===========================================
--测试三个函数..2
--===========================================
INSERTt1VALUES(10)
SELECT[SCOPE_IDENTITY()]=SCOPE_IDENTITY(),
[@@IDENTITY]=@@IDENTITY,
[IDENT_CURRENT()Fort1]=IDENT_CURRENT(Nt1),
[IDENT_CURRENT()Fort2]=IDENT_CURRENT(Nt2)
/*--了局
SCOPE_IDENTITY()@@IDENTITYIDENT_CURRENT()Fort1IDENT_CURRENT()Fort2
-------------------------------------------------------------------------------
4441
(所影响的行数为1行)
--*/
GO
--===========================================
--测试三个函数..3
--**开启一个新毗连,实行上面的代码**
--===========================================
SELECT[SCOPE_IDENTITY()]=SCOPE_IDENTITY(),
[@@IDENTITY]=@@IDENTITY,
[IDENT_CURRENT()Fort1]=IDENT_CURRENT(Nt1),
[IDENT_CURRENT()Fort2]=IDENT_CURRENT(Nt2)
/*--了局
SCOPE_IDENTITY()@@IDENTITYIDENT_CURRENT()Fort1IDENT_CURRENT()Fort2
-------------------------------------------------------------------------------
NULLNULL4&n
--===========================================
--删除测试情况
--===========================================
DROPTABLEt1,t2
--b)代码了局申明
从下面的代码能够看到:
IDENT_CURRENT()一直前往指定表最初拔出的标识值
@@IDENTITY前往以后会话的标识值,不管是不是在统一个感化域,在测试1、2中,能够看到它前往的是触发器中拔出纪录的标识值,而在测试3中,由于以后会话无拔出纪录,以是前往NULL
SCOPE_IDENTITY()前往以后会话统一感化域的标识值,以是在测试1、2中,它前往的值不受触发器的影响,而在测试3中,由于以后会话无拔出纪录,以是前往NULL
需要处理因此带来的更多的支持工作,这有可能会带来成本上的提高。在这种情况下,一些MySQL学习教程发行商可能倾向于选择别的开源数据库,例如遵循BSD授权的PostgreSQL。 |
|