如何将选择插入到具有自动增量参数的表中?

时间:2019-01-16 12:52:26

标签: sql-server

我正在将数据从旧数据库复制到新数据库,并且某些事情发生了变化,我需要将引用键值复制到另一个数据库。这是一对一的关系,因此ID应该匹配,因此为什么我要使用自动增量,但我不知道该怎么做。

这是我的查询

INSERT INTO hMetodologiaProducao (TipoMetodologia, QTDMetodoProducao, IdArtigo)
SELECT hm.TipoMetodologia, hm.QTDMetProd, auto-increment
FROM FolhaRegisto.dbo.hMetodologiaProducao hm
WHERE hm.IdMetProd != 16 AND hm.IdMetProd != 17 AND hm.IdMetProd != 4 AND hm.IdMetProd != 5

我该怎么做?

编辑。我需要自动递增的值是另一个表的标识值,可以是行号,因为种子是从0开始的,因为它是一个全新的数据库

更新

很难解释我想做什么,但这基本上就是我想做的事情

INSERT INTO hMetodologiaProducao (TipoMetodologia, QTDMetodoProducao, IdArtigo)
SELECT hm.TipoMetodologia, hm.QTDMetProd, (Select IdArtigo From hArtigos)
FROM FolhaRegisto.dbo.hMetodologiaProducao hm
JOIN hArtigos ha ON ha.IdArtigo = hm.IdMetProd
WHERE hm.IdMetProd != 16 AND hm.IdMetProd != 17 AND hm.IdMetProd != 4 AND hm.IdMetProd != 5

我想在第3列中插入另一个表中的IdArtigo,但是这样就不允许了我,因为它说值太多。

我也尝试使用联接,但是我不能,因为ID值不同并且某些行的ID会错误

新查询

我发现几乎可以满足我需要的东西

INSERT INTO hMetodologiaProducao (TipoMetodologia, QTDMetodoProducao, IdArtigo)
SELECT hm.TipoMetodologia, hm.QTDMetProd, ha.IdArtigo
FROM FolhaRegisto.dbo.hMetodologiaProducao hm
CROSS JOIN hArtigos ha
WHERE hm.IdMetProd != 16 AND hm.IdMetProd != 17 AND hm.IdMetProd != 4 AND hm.IdMetProd != 5

但是它会插入第一个表中每个值的所有值,这样会给我外键约束错误,我该怎么做,使其只重复一次?

最终编辑

可能的解决方案,这正是我想要的。我只是使用了distinct,所以它不重复值,尽管我不确定这样做是否正确

INSERT INTO hMetodologiaProducao (TipoMetodologia, QTDMetodoProducao, IdArtigo)
SELECT DISTINCT hm.TipoMetodologia, hm.QTDMetProd, ha.IdArtigo
FROM FolhaRegisto.dbo.hMetodologiaProducao hm
CROSS JOIN hArtigos ha
WHERE hm.IdMetProd != 16 AND hm.IdMetProd != 17 AND hm.IdMetProd != 4 AND hm.IdMetProd != 5

1 个答案:

答案 0 :(得分:1)

我认为如果我是对的,您想在Identity列中插入值。您可以通过以下方式进行操作。

Create table MyTable (Id int identity(1, 1), Name Varchar(20))

Set identity_insert MyTable on
insert MyTable(Id, Name) values (1 , 'A'), (2, 'B')

Select * from MyTable