当IDENTITY_INSERT设置为OFF时

问题:当IDENTITY_INSERT设置为OFF时,不能向表'教师'中的标识列id插入显式值。?????

解决方法:

在要插入的语句前加入“SET IDENTITY_INSERT 表名 ON

GO”即可解决


SET IDENTITY_INSERT允许将显式值插入表的标识列中。  
语法  
SET IDENTITY_INSERT [ database.[ owner.] ] { table } { ON | OFF }  
参数  
database  
是指定的表所驻留的数据库名称。  
owner  
是表所有者的名称。  
table  
是含有标识列的表名。  
注释  
任何时候,会话中只有一个表的IDENTITY_INSERT属性可以设置为ON。如果某个表已将此属性设置为ON,并且为另一个表发出了SET IDENTITY_INSERT ON语句,则Microsoft® SQL Server™返回一个错误信息,指出 SET IDENTITY_INSERT 已设置为ON并报告此属性已设置为 ON 的表。  
   
如果插入值大于表的当前标识值,则 SQLServer 自动将新插入值作为当前标识值使用。  
   
SET IDENTITY_INSERT的设置是在执行或运行时设置,而不是在分析时设置。  
   
权限  
执行权限默认授予sysadmin固定服务器角色和db_owner及db_ddladmin固定数据库角色以

及对象所有者。  
   
示例  
下例创建一个含有标识列的表,并显示如何使用 SET IDENTITY_INSERT 设置填充由DELETE语句导致的标识值中的空隙。  
   

--   Create   products   table.  
CREATE   TABLE   products   (id   int   IDENTITY   PRIMARY   KEY,   product   varchar(40))  
GO  
--   Inserting   values   into   products   table.  
INSERT   INTO   products   (product)   VALUES   ('screwdriver')  
INSERT   INTO   products   (product)   VALUES   ('hammer')  
INSERT   INTO   products   (product)   VALUES   ('saw')  
INSERT   INTO   products   (product)   VALUES   ('shovel')  
GO  
   
--   Create   a   gap   in   the   identity   values.  
DELETE   products    
WHERE   product   =   'saw'  
GO  
   
SELECT   *    
FROM   products  
GO  
   
--   Attempt   to   insert   an   explicit   ID   value   of   3;  
--   should   return   a   warning.  
INSERT   INTO   products   (id,   product)   VALUES(3,   'garden   shovel')  
GO  
--   SET   IDENTITY_INSERT   to   ON.  
SET   IDENTITY_INSERT   products   ON  
GO  
   
--   Attempt   to   insert   an   explicit   ID   value   of   3  
INSERT   INTO   products   (id,   product)   VALUES(3,   'garden   shovel').  
GO  
   
SELECT   *    
FROM   products  
GO  
--   Drop   products   table.  
DROP   TABLE   products  
GO

 

 

你可能感兴趣的:(当IDENTITY_INSERT设置为OFF时)