在多个表上设置enable identity insert,其中一些表的id已经为on



我想将数据导入数据库。为了做到这一点,我需要设置indentity insert on。使用edit mapping为500多个表设置此项不是一个选项。

所以我找到了这个So问题

但其中一些表已经将其设置为ON,因此在一个查询中执行此操作将在一个错误的语句上产生错误并停止。如何强制它忽略错误并转到下一个语句,直到它尝试为所有表设置为ON?

如何导入数据?您可能需要了解"批量导入数据时保持标识值"。

一次只能为一个表打开IDENTITY_INSERT(每个会话)。如果需要,可以使用此查询生成一个脚本,为每个适用的表关闭IDENTITY_INSERT。

select 
    N'SET IDENTITY_INSERT ' + quotename(s.name) + N'.' + quotename(o.name) + N' OFF'
from 
    sys.objects o
        inner join sys.schemas s on s.schema_id = o.schema_id
        inner join sys.columns c on c.object_id = o.object_id
where 
    o.type = 'U' and
    c.is_identity = 1

适用于sql server 2005及以上版本开始尝试

   set identity_insert (table 1 name) on
end try
begin catch
    print ' table 1 already on'
end catch
 begin try
   set identity_insert (table 2 name) on
end try
begin catch
    print ' table 2 already on'
end catch    

最新更新