我正在使用新ID更新ID,但我需要为表A中的主记录及其表B中的依赖项保留相同的ID。
评论中包含的大块是我无法弄清楚的部分。我需要更新表B中与我正在查看表A的当前记录共享相同ID的所有记录。
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
答案 0 :(得分: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)