我正在将数据从旧数据库复制到新数据库,并且某些事情发生了变化,我需要将引用键值复制到另一个数据库。这是一对一的关系,因此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
答案 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