创建新元素并通过SQL中的连接表将它们附加到父元素

时间:2013-05-20 21:58:03

标签: sql sql-server-express jointable

我正在迁移数据库模型,我必须将1:n关系更改为n:m关系。

我需要将INSERT数据放入新表中,并使用流程中生成的ID来填充连接表。

这些表名为PartsDocument,它们之间的联接表名为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联接表只有两列PartIDDocumentID,它们一起用作复合键。

我希望的结果是每个部分都有两个文档,它们将通过连接表与相应的部分链接。

我正在使用SQL Server Express 2012。 http://sqlfiddle.com/#!6/b51f0

2 个答案:

答案 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}}部分。您必须选择刚刚创建的线条以及它们来自的零件元素。