0

The tables I have are;

TableA {TableA_OID, TableB_OID, SomeFields} //Source Table

TableB{TableB_OID, SomeFields} //Destination Table

I have to copy some data from source table to destination table, and on success i want to take the primary key identity field(TableB_OID) of destination table back to update (TableB_OID) field in the source table.

4

3 回答 3

1

我认为以下方法会起作用,但我会首先使用一些合理大小的数据集,以确保:

DECLARE @TA TABLE (ID INT IDENTITY(1,1), AID INT)
INSERT @TA(AID) SELECT TableA_OID FROM TABLEA  -- ORDER BY data desc 
DECLARE @TB TABLE (ID INT IDENTITY(1,1), BID INT)

INSERT TableB( data )
OUTPUT Inserted.TableB_OID INTO @TB(BID)
SELECT data 
FROM @TA TA JOIN TableA ON TA.AID=TableA.TableA_OID ORDER BY TA.ID

SELECT * FROM @TA
SELECT * FROM @TB

UPDATE TableA 
SET TableB_OID=TB.BID
FROM @TB TB 
    JOIN @TA TA ON TB.ID=TA.ID
    JOIN TableA ON TA.AID=TableA.TableA_OID

SELECT * FROM TableA
SELECT * FROM TableB

首先,我们将对从表 A 中提取的数据强加一个顺序,并使用临时表中的标识列来记录该顺序,并链接到原始表 A 记录。然后,我们将使用该顺序将数据插入表 B,并将结果输出记录到另一个临时表中。同样,我们将使用身份来记录序列。然后,我们将使用两个临时表中的标识值来链接 tableA 和 tableB 行

于 2013-06-19T12:03:47.173 回答
0

如果您需要一次复制多行,则如下所示:

DECLARE @data TABLE(ID int, data varchar(50))

INSERT TableB( data )
OUTPUT Inserted.TableB_OID, INSERTed.data INTO @data
SELECT data FROM TableA 


UPDATE TableA 
SET TableB_OID=D.ID
FROM @data D JOIN TableA ON D.DATA=TableA.data

但它确实做了一个假设,在我的示例中,您的“SomeField”(列“数据”)中有一个唯一键,否则您无法将身份数据关联回 tableA。如果有,那很好,否则,正如斯蒂芬所说,您需要在 TableB 中添加一个 TableA_OID 字段才能进行连接以写回数据

于 2013-06-19T11:11:42.073 回答
0

我想你想选择scope_identity()?

这将做一行:

    INSERT INTO TableB (
        something
    )
    VALUES (
        'Some Value'
    )

    DECLARE @Id int
    SET @Id = scope_identity()

    UPDATE TableA SET tableB_OID = @Id WHERE TableA_OID = TableAId
于 2013-06-19T10:53:47.283 回答