仓酷云

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

[学习教程] 往自增列拔出显式值-SET IDENTITY_INSERT详解

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

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

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

x
闪回的目的是要让数据库在commit之后,还能恢复到之前的某个状态,整库或指定的表。自增列默许是不克不及拔出显式值的,当我们试图给自增列拔出值时,会报以下毛病:
当IDENTITY_INSERT设置为OFF时,不克不及为表table1中的标识列拔出显式值。

假如我们想为表的自增列拔出显式值,我们能够经由过程SETIDENTITY_INSERT语法来完成,这在数据转移的时分尤其无效。
我们先看看IDENTITY_INSERT的语法。
感化:同意将显式值拔出表的标识列中。

语法:SETIDENTITY_INSERT[database_name.[schema_name].]table{ON|OFF}

参数:
database_name
指定的表地点的数据库的称号。
schema_name
表所属的架构的称号。
table
包括标识列的表的称号。

备注:
任什么时候候,一个会话中只要一个表的IDENTITY_INSERT属性能够设置为ON。假如某个表已将此属性设置为ON,则对另外一个表收回SETIDENTITY_INSERTON语句时,SQLServer2005将前往一个毛病信息,指出SETIDENTITY_INSERT已设置为ON,并呈报已将其属性设置为ON的表。
假如拔出值年夜于表确当前标识值,则SQLServer主动将新拔出值作为以后标识值利用。
SETIDENTITY_INSERT的设置是在实行或运转时设置的,而不是在剖析时设置的。


示例:
我们先创立一个带有自增列的表:
createtablehr_member(IDintidentity(1,1)primarykey,namevarchar(100))

然后我们实验往该表拔出数据:
insertintohr_member(id,name)values(1,wfs)


会报以下的毛病:
当IDENTITY_INSERT设置为OFF时,不克不及为表hr_member中的标识列拔出显式值。

设置identity_insert的值后再拔出数据:
setidentity_inserthr_memberon
insertintohr_member(id,name)values(1,wfs)

实行乐成!

注重:在统一个会话中,只能有一个表的identity_insert能够设置为ON。
我们再创立另外一个表:
createtablehr_member_1(IDintidentity(1,1)primarykey,namevarchar(100))

然后实行:
setidentity_inserthr_memberon
setidentity_inserthr_member_1on

会报以下的毛病:
表test.dbo.hr_member的IDENTITY_INSERT已为ON。没法为表hr_member_1实行SET操纵。

修正代码:
setidentity_inserthr_memberoff
setidentity_inserthr_member_1on
实行乐成!

注重:我们在在对标识列实行拔出操纵时,必定要列出此标识列的列名:
以下代码:
setidentity_inserthr_memberon
insertintohr_member
select2,abc

会报以下毛病:
仅当利用了列列表而且IDENTITY_INSERT为ON时,才干为表hr_member中的标识列指定显式值。

修正代码:
setidentity_inserthr_memberon
insertintohr_member(ID,name)
select2,abc
实行乐成!

注重:任何setidentity_insert表名on的设置,都只在以后会话中无效!
会话的界说,请参考本站猎取sqlserver中自增量之scope_identity(),@@Identity,IDENT_CURRENT的区分中对sql会话的注释对于insert和delete,event中包含了插入/删除的记录的所有字段的值(太爽了。。)
飘灵儿 该用户已被删除
沙发
发表于 2015-1-18 12:32:16 | 只看该作者
可以动态传入参数,省却了动态SQL的拼写。
萌萌妈妈 该用户已被删除
板凳
 楼主| 发表于 2015-1-23 05:28:21 | 只看该作者
以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了
变相怪杰 该用户已被删除
地板
发表于 2015-1-31 14:52:03 | 只看该作者
原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。
透明 该用户已被删除
5#
发表于 2015-2-6 20:21:55 | 只看该作者
数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。
admin 该用户已被删除
6#
发表于 2015-2-18 14:53:45 | 只看该作者
从项目平台的选择上讲,我们关心的,应该是一款产品能不能满足任务需求,而不是网上怎么说。
谁可相欹 该用户已被删除
7#
发表于 2015-3-6 08:33:02 | 只看该作者
如果你是从“学习某一种数据库应用软件,从而获得应聘的资本和工作机会”的角度来问的话。
灵魂腐蚀 该用户已被删除
8#
发表于 2015-3-12 23:57:46 | 只看该作者
换言之,只有在不断的失败中尝试成功,而关于失败的总结却是很少的
9#
发表于 2015-3-20 06:44:52 | 只看该作者
入门没那么困难,精通没那么容易
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-3-13 03:25

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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