您的位置:首页 > 其它

当 IDENTITY_INSERT 设置为 OFF 时,不能为表中的标识列插入显式值

2015-07-22 16:01 375 查看
当 IDENTITY_INSERT 设置为 OFF 时,不能为表中的标识列插入显式值。

当对数据库中的表进行插入操作时,有时候会出现这个异常。处理这个异常可以从两个方面触发:

数据库sql语句 。

修改Hibernate中持久化类映射配置文件中的主键生成策略。

一:数据库sql语句:

问题描述:当将数据库表主键设计为 (Orderid int identity primary key),相对这个主键IDENTITY_INSERT默认设置为OFF,就是不能够显示插入主键id的值,例子如下:

insert  into  t_notice ( id , createTime ) values (1,'2014-10-01 00:00:00')


执行上面语句会提示一个错误:

服务器: 消息 544,级别 16,状态 1,行 1

当 IDENTITY_INSERT 设置为 OFF 时,不能向表 ‘notice ’ 中的标识列插入显式值。

修改方法如下:

–允许将显式值插入表的标识列中 ON-允许 OFF-不允许

set identity_insert notice ON--打开


set identity_insert notice OFF--关闭


注意:

当 IDENTITY_INSERT 设置为 OFF 时,不能为表中的标识列插入显式值

–问题注意

(1)任何时候,会话中只有一个表的 IDENTITY_INSERT 属性可以设置为 ON。如果某个表已将此属性设置为 ON,并且为另一个表发出了 SET IDENTITY_INSERT ON 语句,则 Microsoft® SQL Server™ 返回一个错误信息,指出 SET IDENTITY_INSERT 已设置为 ON 并报告此属性已设置为 ON 的表

(2)如果插入值大于表的当前标识值,则 SQL Server 自动将新插入值作为当前标识值使用

(3)SET IDENTITY_INSERT 的设置是在执行或运行时设置,而不是在分析时设置

二:修改配置文件

在实体类的hibernate配置文件中,将主键生成策略改为如下:

<generator class="native"></generator>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: