日期:2014-05-16 浏览次数:20538 次
问题:当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
?