我正在迁移数据库模型,我必须将1:n
关系更改为n:m
关系。
我需要将INSERT
数据放入新表中,并使用流程中生成的ID
来填充连接表。
这些表名为Parts
和Document
,它们之间的联接表名为PartDocument
。
现在我想为每个documents
创建两个唯一的part
(带有默认类型/名称/描述),并通过连接表将它们链接到相应的part
。我可以很容易地创建2 * N documents
,但是我很难弄清楚如何将每个链接到PartDocument
连接表。
INSERT INTO Document (Type, Name, Description)
SELECT 1, 'Work Instructions', 'Work Instructions'
FROM Parts
GO
INSERT INTO Document (Type, Name, Description)
SELECT 2, 'Drawing', 'Drawing'
FROM Parts
GO
INSERT INTO PartDocument (PartID, DocumentID)
?????
我的PartDocument
联接表只有两列PartID
和DocumentID
,它们一起用作复合键。
我希望的结果是每个部分都有两个文档,它们将通过连接表与相应的部分链接。
我正在使用SQL Server Express 2012。 http://sqlfiddle.com/#!6/b51f0
答案 0 :(得分:1)
我最终做的是在创建Document表时添加临时PartID列。然后,我可以在创建并链接文档后删除此列。
基本上就是这样:
INSERT INTO Document (Type, Name, Description, PartID)
SELECT 1, 'Work Instructions', 'Work Instructions', Part.ID
FROM Part
GO
INSERT INTO PartDocument
SELECT Document.PartID, Document.ID
FROM Document
GO
ALTER TABLE Document
DROP COLUMN PartID
GO
答案 1 :(得分:0)
INSERT INTO Document (Type, Name, Description)
SELECT 1, 'Work Instructions', 'Work Instructions'
FROM Parts
GO
INSERT INTO Document (Type, Name, Description)
SELECT 2, 'Drawing', 'Drawing'
FROM Parts
GO
INSERT INTO PartDocument (PartID, DocumentID)
SELECT part.id, document.id
FROM Parts part
INNER JOIN Document document ON part.field1 = document.field1
GO
复杂元素是最后一个选择中ON
的{{1}}部分。您必须选择刚刚创建的线条以及它们来自的零件元素。