我有一个包含3列的表,需要将其移动到另一个表中,并替换为另一个表中插入行的IdentityID。
Here是我尝试使用的基本思想的SQLFiddle:
CREATE TABLE RECORD
(
ID int,
ObjectDetail_A int,
ObjectDetail_B int,
ObjectDetail_C int,
ObjectDetailID int
)
CREATE TABLE OBJECTDETAIL
(
ID int,
ObjectDetail_A int,
ObjectDetail_B int,
ObjectDetail_C int
)
因此,当数据插入该表时,字段ObjectDetail_A,ObjectDetail_B和ObjectDetail_C将替换为OBJECTDETAIL表的ID。
我对如何将行插入目标表然后使用目标标识更新源表感到困惑。
非常感谢任何帮助,
由于
答案 0 :(得分:1)
我想解决方案并不像我想象的那么复杂。
我做的是:
ALTER TABLE OBJECTDETAIL
ADD SourceID INT
GO
INSERT INTO ProductDetail (ObjectDetail_A, ObjectDetail_B, ObjectDetail_C, SourceID)
SELECT ObjectDetail_A, ObjectDetail_B, ObjectDetail_C, ID
FROM RECORD
GO
UPDATE RECORD
SET RECORD.ObjectDetailID = OBJECTDETAIL.ID
JOIN OBJECTDETAIL
ON RECORD.ID = OBJECTDETAIL.SourceID
GO
ALTER TABLE OBJECTDETAIL
DROP COLUMN SourceID
GO
这对我有用。感谢所有的回复。
答案 1 :(得分:0)
只要A,B和& C字段是唯一的,或者你可以使用相同的ObjectDetail.ID重复,然后你可以只插入它们,然后JOIN获取新的ID:
INSERT INTO ObjectDetail
( ObjectDetail_A, ObjectDetail_B, ObjectDetail_C )
SELECT DISTINCT ObjectDetail_A, ObjectDetail_B, ObjectDetail_C
FROM Record
UPDATE Record
SET ObjectDetailID = d.ID
FROM Record r
INNER JOIN ObjectDetail d
ON r.ObjectDetail_A = d.ObjectDetail_A
AND r.ObjectDetail_B = d.ObjectDetail_B
AND r.ObjectDetail_C = d.ObjectDetail_C
答案 2 :(得分:0)
据我所知,你需要创建两个表..
CREATE TABLE OBJECTDETAIL
(
ObjectDetailID int
ObjectDetail_A int,
ObjectDetail_B int,
ObjectDetail_C int,
PRIMARY KEY (ObjectDetailID),
)
CREATE TABLE RECORD
(
ID int,
ObjectDetailID int,
CONSTRAINT fk_objectdetail FOREIGN KEY (ObjectDetailID) REFERENCES OBJECTDETAIL(ObjectDetailID)
)
通过这种方式,您可以先插入OBJECTDETAIL
,然后使用插入的RECORD
ObjectDetailID
答案 3 :(得分:0)
将OBJECTDETAIL.ID设为自动增量IDENTITY字段。
INSERT INTO OBJECTDETAIL
( SELECT DISTINCT
ObjectDetail_A,
ObjectDetail_B,
ObjectDetail_C
FROM RECORD )
然后更新RECORD.ObjectDetailID。
UPDATE R
SET R.ObjectDetailID = OD.ID
FROM RECORD R
JOIN OBJECTDETAIL OD
ON OD.ObjectDetail_A = R.ObjectDetail_A
AND OD.ObjectDetail_B = R.ObjectDetail_B
AND OD.ObjectDetail_C = R.ObjectDetail_C
RECORD.ObjectDetailID应该是一个外键字段,并且应该从表中删除RECORD.ObjectDetail_A等字段。