Sql server 在插入之前和之后动态打开和关闭标识\u插入

Sql server 在插入之前和之后动态打开和关闭标识\u插入,sql-server,Sql Server,无法在SQL中切换您的标识\u Insert。但是,您可以通过使用动态sql实现同样的效果。每次在表中插入某些数据时,请为该表设置Identity\u Insert ON,并在执行查询后将其关闭 您可以在一个命令中同时启用和关闭,以确保执行查询后它始终处于关闭状态 select row_number() over (order by 1) as rn, * into #execute_insert from #finaldata where noof

无法在SQL中切换您的
标识\u Insert
。但是,您可以通过使用
动态sql
实现同样的效果。每次在表中插入某些数据时,请为该表设置
Identity\u Insert ON
,并在执行查询后将其关闭

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

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

注意:我没有检查您的查询,希望可以单独工作,这是在单个查询语句中设置
IDENTITY\u INSERT
打开和
关闭的示例。

不,这是不可能的此代码有什么意义?您想做什么?为什么数据库设置会影响哪些内容应该或不应该进入表?顺便说一句,当您已经连接字符串时,您不需要使用单个参数调用
CONCAT
SET Identity\u Insert ON
是一条语句,不是表达式,不能在
IF
中使用。您不能像在
ELSE
分支中那样单独使用
IDENTITY\u INSERT
。无论你想做什么,都有简单得多的方法。问题是我需要如何在插入前设置identity_insert为开,在插入后设置if条件为关。我只是想知道这样写的正确方式是什么@DaleBurrellI刚刚了解到concat是不必要的。多谢各位@PanagiotisKanavos@sashank实际的问题是什么?您根本不必切换IDENTITY\u INSERT。有几种方法可以生成递增值并插入特定ID,而无需使用
IDENTITY
,我想做的是将数据从一个数据库插入到具有相同表的另一个数据库。所以我用的是Identity_insert。我认为这是一种方法。那就试试吧@PanagiotisKanavos只是想知道如何使用它。就像DarkRob提到的例子一样。@sashank这对你没有帮助-你最终会得到重复的ID。我怀疑你已经发现了,因此,
NOCHECK
。一旦您将IDENTITY返回,您仍然会得到任何新行的副本。因此,在这种情况下,使用Sequence是否比IDENTITY\u insert更好。我是DB的新手。所以我只是在探索。如果你能给我指点迷津,我会很有帮助的@PanagiotisKanavos@sashank:正如您所说,您正在将数据从一个表复制到另一个表,这样就可以创建与基表相同的记录,如果插入一些新id,则很难再次跟踪记录。如果有一些关系保持,那么你可能会失去那部分。所以,您需要首先决定是发布相同的记录,还是在旧记录的基础上创建新记录。
.
.
.
-- 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 )
.
.
.