萌萌妈妈 发表于 2015-1-16 22:30:15

MYSQL教程之SQL SERVER 2000 中的标识值猎取函数

到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(),
[@@IDENTITY]=@@IDENTITY,
=IDENT_CURRENT(Nt1),
=IDENT_CURRENT(Nt2)
/*--了局
SCOPE_IDENTITY()@@IDENTITYIDENT_CURRENT()Fort1IDENT_CURRENT()Fort2
-------------------------------------------------------------------------------
1331
(所影响的行数为1行)
--*/
GO
--===========================================
--测试三个函数..2
--===========================================
INSERTt1VALUES(10)
SELECT=SCOPE_IDENTITY(),
[@@IDENTITY]=@@IDENTITY,
=IDENT_CURRENT(Nt1),
=IDENT_CURRENT(Nt2)
/*--了局
SCOPE_IDENTITY()@@IDENTITYIDENT_CURRENT()Fort1IDENT_CURRENT()Fort2
-------------------------------------------------------------------------------
4441
(所影响的行数为1行)
--*/
GO
--===========================================
--测试三个函数..3
--**开启一个新毗连,实行上面的代码**
--===========================================
SELECT=SCOPE_IDENTITY(),
[@@IDENTITY]=@@IDENTITY,
=IDENT_CURRENT(Nt1),
=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。

莫相离 发表于 2015-1-19 15:39:45

再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。

金色的骷髅 发表于 2015-1-27 17:52:07

groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。

变相怪杰 发表于 2015-2-5 11:16:26

比如,MicrosoftSQLServer2008的某一个版本可以满足现在的这个业务的需要,而且价格还比Oracle11g要便宜,那么这一产品就是适合的。

再现理想 发表于 2015-2-11 11:51:44

多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。

谁可相欹 发表于 2015-3-2 12:17:07

在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。

老尸 发表于 2015-3-11 03:42:26

以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了

只想知道 发表于 2015-3-17 20:09:40

连做梦都在想页面结构是怎么样的,绝非虚言

萌萌妈妈 发表于 2015-3-24 23:40:13

个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。
页: [1]
查看完整版本: MYSQL教程之SQL SERVER 2000 中的标识值猎取函数