1

我有一个包含 3 列的表,需要移动到另一个表并替换为另一个表中插入行的 IdentityID。

是我正在尝试使用的基本思想的 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。

我只是有点困惑如何将一行插入目标表,然后用目标标识更新源表。

任何帮助将非常感激,

谢谢

4

4 回答 4

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

这对我有用。感谢所有的答复。

于 2013-04-23T19:50:21.123 回答
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 等字段。

于 2013-04-23T18:38:34.080 回答
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
于 2013-04-23T18:36:42.553 回答
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

于 2013-04-23T18:37:59.053 回答