工作中,时不时会遇到导入数据的情况,对于自增列,SQL Server默认时不允许插入的。可以将IDENTITY_INSERT 设置为 ON。方法如下:

SET IDENTITY_INSERT [tableName] ON

这条命令时会话级别的。会话退出后,IDENTITY_INSERT会被置为OFF

注意: 对于没有自增列的表,使用上述命令,会出错。表 ‘dbo.XXX’ 没有标识属性。无法执行 SET 操作。

在脚本中处理多张表的数据,这就需要判断表中是否有自增列。

SELECT OBJECTPROPERTY(OBJECT_ID('dbo.XXXX'),'TableHasIdentity')

如果表中包含自增列,则OBJECTPROPERTY(OBJECT_ID(‘dbo.XXXX’),’TableHasIdentity’) 返回 1, 否则返回 0。 通过这个条件可以动态的设置表的IDENTITY_INSERT属性。

IF OBJECTPROPERTY(OBJECT_ID('dbo.XXX'),'TableHasIdentity')=1
BEGIN
    SET IDENTITY_INSERT dbo.XXX ON 
END
GO

OBJECTPROPERTY函数1


用法:

OBJECTPROPERTY ( id , property )

id 为表或者其他对象的唯一标识,int类型。
property 为属性名称varchar类型,除TableHasIdentity外还有TableHasForeignKey等。 完整的列表参考MSDN官方文档1

参考资料