首页 > 解决方案 > 动态开启和关闭插入前后的 IDENTITY_INSERT

问题描述

select 
    row_number() over (order by 1) as rn, * 
into 
    #execute_insert 
from 
    #finaldata 
where 
    noofrows > 0;

declare @intmin int, @intmax int

select @intmin = min(rn), max(rn) 
from #execute_insert

begin
    declare @query nvarchar(max) ='';

    select @query = concat('ALTER TABLE ' + table_Name + 'NOCHECK CONSTRAINT All ') 

    If set Identity_Insert ON 
        select @query = 'insert Into' + @Table_Name + ' '+ @column_Name 
                       +' select ' + @Column_Name 
                       +' from '+@Table_Name+' '+ sql_query+'' 
    Else Identity_insert Off
end

标签: sql-server

解决方案


无法Identity_Insert在 SQL 中切换。但是,您可以使用dynamic sql. 每次在表中插入一些数据时,在执行查询后Identity_Insert ON为该表和它设置。close

您可以同时ON使用OFF一个命令,以确保它在执行查询后始终处于关闭状态。

.
.
.
-- your code

SET @query = 'SET IDENTITY_INSERT ' + @Table_Name + ' ON '
SET @query = @query + ' insert Into' + @Table_Name + ' '+ @column_Name 
                       +' select ' + @Column_Name 
                       +' from '+@Table_Name+' '+ sql_query+''
SET @query = @query + ' SET IDENTITY_INSERT ' + @Table_Name + ' OFF '
EXEC (@query )
.
.
.

注意:我没有检查您的查询,希望单独工作正常,这是设置IDENTITY_INSERT ONOFF单个查询语句的示例。


推荐阅读