Цикл WHILE для обновления записей из таблицы сопоставления

#sql-server

#sql-сервер

Вопрос:

У меня есть таблица сопоставления:

 MappingTable
OLD_ID    NEW_ID
1234      A-98276
1345      A-78473
7635      A-89328
  

В таблице сопоставления около 10 000 строк.

У меня есть другая таблица с OLD_IDs, и мне нужно обновить значения в OLD_ID значением NEW_ID.

 TestTable
OLD_ID
1234
7635
1345
  

Запрос будет:

 UPDATE TestTable SET OLD_ID = 'A-98276' WHERE OLD_ID = '1234'
  

Мне нужно сделать это для каждой строки в TestTable. Я знаю, что это возможно с помощью цикла WHILE, но не уверен, как это сделать. Должен быть способ получить номер строки…

 DECLARE @count, @i INT
SET @count = SELECT COUNT(*) FROM TestTable
SET @i = 1
WHILE (@i < @count)
BEGIN
   UPDATE TestTable SET OLD_ID = (SELECT NEW_ID FROM MappingTable WHERE OLD_ID = @???)
   SET @i = @i   1
END
  

Спасибо.

Ответ №1:

Цикл не должен быть необходимым. Кажется, вы ищете что-то вроде этого

 update t
set OLD_ID=m.NEW_ID
from TestTable t
     join MappingTable m on t.OLD_ID=m.OLD_ID;
  

Комментарии:

1. Спасибо. Это должно сделать это. Я попробую!