Sql server 2008 SQL server插入多行并递增一个int列
我在一个表中有一些行,需要将它们转移到另一个表中。在目标表中,我还需要添加一个具有增量值的字段 我正在执行以下操作,但我知道insert中有错误,因为递增的值(intCodInterno)总是相同的: 我需要更改什么以使值正确递增 多谢各位 编辑: 我在查询中做了一个小改动,现在它可以工作了。 我只需在括号内的当前标识中插入一个SELECT:Sql server 2008 SQL server插入多行并递增一个int列,sql-server-2008,auto-increment,Sql Server 2008,Auto Increment,我在一个表中有一些行,需要将它们转移到另一个表中。在目标表中,我还需要添加一个具有增量值的字段 我正在执行以下操作,但我知道insert中有错误,因为递增的值(intCodInterno)总是相同的: 我需要更改什么以使值正确递增 多谢各位 编辑: 我在查询中做了一个小改动,现在它可以工作了。 我只需在括号内的当前标识中插入一个SELECT: (SELECT IDENT_CURRENT('Emp_VISOT.dbo.TBL_GCE_ARTIGOS')+1) 我用递增的值从旧表到新表获得了所需的
(SELECT IDENT_CURRENT('Emp_VISOT.dbo.TBL_GCE_ARTIGOS')+1)
我用递增的值从旧表到新表获得了所需的所有行 当前标识('Emp_VISOT.dbo.TBL_GCE_ARTIGOS')+1
当您想要运行查询时,计算一次,所有行都将获得相同的id
第一种解决方案是通过循环构造(如游标或其他)在select结果上迭代,然后插入递增的索引(您可以这样做)
第二种解决方案是使目标表中的该列
identity
使用intCodInterno删除该部分,并在SQL Server中使用自动递增 IDENT_CURRENT在事务提交之前不会更新,因此它的值在插入之前保持不变
以下是解决此问题的三个选项:
如果您需要自定义标识函数(我假设您现在不使用标识列是有原因的),您可以使用上面概述的一些步骤创建一个:在我的示例中,我使用相同的业务逻辑按顺序插入行。我不能使用自动增量,因为我还必须将旧数据导入此列。导入数据后,您可以更新列以进行自动增量。如果您使用
IDENT_CURRENT
,则表示该表上有IDENTITY
列;只是不要在列列表中指定该列,也不要向其插入任何值-插入时,IDENTITY
列将自动获得一个新的唯一值…不幸的是,目标表中已经存在一个具有IDENTITY的列。请寻找将该列的值用作intCodInterno列的值的方法,某事物,如计算列或。。。
(SELECT IDENT_CURRENT('Emp_VISOT.dbo.TBL_GCE_ARTIGOS')+1)