SQL Server IDENTITY INSERT
工作中,时不时会遇到导入数据的情况,对于自增列,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