2010-03-17 37 views
0

我更新与新的ID的ID还更新记录,但我需要保留在表A中的主记录表B.同一ID及其家属更新表使用游标,但在另一个表

由评论括起来的块是我无法弄清楚的部分。我需要更新所有表B中与目前的战绩相同的ID记录我在看的表A

DECLARE CURSOR_A CURSOR FOR 
SELECT * FROM TABLE_A 
FOR UPDATE 

OPEN CURSOR_A 
FETCH NEXT FROM CURSOR_A 

WHILE @@FETCH_STATUS = 0 
BEGIN 

BEGIN TRANSACTION 
    UPDATE KEYMASTERTABLE 
    SET RUNNING_NUMBER=RUNNING_NUMBER+1 
    WHERE TRANSACTION_TYPE='TABLE_A_NEXT_ID' 

-- FOLLOWING CHUNK IS WRONG!!! 
    UPDATE TABLE_B 
    SET TABLE_B_ID=(SELECT RUNNING_NUMBER 
    FROM KEYMASTERTABLE WHERE TRANSACTION_TYPE='TABLE_A_NEXT_ID') 
    WHERE TABLE_B_ID = (SELECT TABLE_A_ID 
    FROM CURRENT OF CURSOR A) 
-- END OF BAD CHUNK 

    UPDATE TABLE_A 
    SET TABLE_A_ID=(SELECT RUNNING_NUMBER 
    FROM KEYMASTERTABLE WHERE TRANSACTION_TYPE='TABLE_A_NEXT_ID') 
    WHERE CURRENT OF CURSOR_A 
COMMIT 
    FETCH NEXT FROM CURSOR_A 
END 

CLOSE CURSOR_A 
DEALLOCATE CURSOR_A 
GO 
+2

那不是甲骨文PLSQL代码。 Postgres? MySQL? – 2010-03-18 00:47:56

回答

0

基于这样的假设,通过+1没有按递增当前数据的过程不会在数据本身造成问题,我会创建一个翻译表。 Column1是旧ID,Column2是新ID。 然后,两个表都将通过相同的更新运行。 这也可以让您审核流程,以防出现问题。

喜欢的东西

Update table TargetA a 
    set a.id =(select t.column2 from tranlation_table t where t.column1 = a.id); 

Update table TargetB b 
    set b.id =(select t.column2 from tranlation_table t where t.column1 = b.id)