Sql server 在插入之前和之后动态打开和关闭标识\u插入
无法在SQL中切换您的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
标识\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 )
.
.
.