仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 678|回复: 8
打印 上一主题 下一主题

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

[复制链接]
萌萌妈妈 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:30:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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。
莫相离 该用户已被删除
沙发
发表于 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要便宜,那么这一产品就是适合的。
再现理想 该用户已被删除
5#
发表于 2015-2-11 11:51:44 | 只看该作者
多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。
谁可相欹 该用户已被删除
6#
发表于 2015-3-2 12:17:07 | 只看该作者
在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。
老尸 该用户已被删除
7#
发表于 2015-3-11 03:42:26 | 只看该作者
以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了
只想知道 该用户已被删除
8#
发表于 2015-3-17 20:09:40 | 只看该作者
连做梦都在想页面结构是怎么样的,绝非虚言
萌萌妈妈 该用户已被删除
9#
 楼主| 发表于 2015-3-24 23:40:13 | 只看该作者
个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-4 11:26

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表