Обновить столбец таблицы из старой и новой ссылки на таблицу - PullRequest
0 голосов
/ 13 июня 2019

Добрый день,

По сути, у меня есть система, которая ссылается на старые таблицы. Но проблема в том, что у меня есть новая таблица (идентичная старой, но первичный ключ другой), и я хочу сослаться в моей системе на новую таблицу. Текущая система уже сохранила внешний ключ из старой таблицы. Но я хочу обновить эти внешние идентификаторы, чтобы они правильно ссылались на новую таблицу. Проблема в том, что старая таблица состоит из сотен записей, и я не знаю, какой запрос использовать для обновления системной таблицы, ссылающейся на новую таблицу.

Столбцы старой таблицы с образцами данных (с сотнями записей)

| CompanyId |      Name      |
|   4301    |   Apple Inc.   | 
|   4302    |   Microsoft    | 

Новые столбцы таблицы с образцами данных (те же данные со старым, но другим первичным ключом)

| CompanyId |      Name      |
|   1002    |   Apple Inc.   | 
|   1003    |   Microsoft    | 

Вот мой пример таблицы с внешним ключом из старой таблицы компании.

| CustomerId |  CompanyId  |  CustomerName  |
|     1      |     4301    |  John E. Doe   |
|     2      |     4301    |  Lorem K. Fox  |

Единственная известная мне процедура - это создание запроса по одному вручную.

UPDATE Customer SET CompanyId=1002 WHERE CustomerId=1

Но это плохая идея, потому что я имею дело с сотнями записей.

Любая помощь, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

Вам необходимо создать таблицу сопоставления, чтобы связать идентификаторы из старой таблицы с новой таблицей.

Итак, в вашем примере:

         mappingtable
| oldcompanyid | newcompanyid |
|    4301      |     1001     |
|    4302      |     1002     |

Затем вы можете обновить таблицу клиентов, соединив старый ключ с новым:

update s
    set s.companyid = nt.companyid
    from samples s join
         mappingtable t on s.companyid=t.oldcompanyid join 
         newtable nt
         on t.newcompanyid = nt.companyid 
0 голосов
/ 13 июня 2019

Вы можете использовать join. Предполагая, что имена совпадают:

update s
    set s.companyid = nt.companid
    from samples s join
         oldtable ot
         on s.companyid = ot.companyid join
         newtable nt
         on ot.name = nt.name;

Теперь некоторые предостережения:

  • Вам нужно отменить ограничение внешнего ключа, чтобы это работало. Вы должны добавить его потом.
  • Это может не обновить все строки в таблице, если некоторые имена не совпадают.
  • Если не все строки обновлены, то итоговые идентификаторы могут быть смешаны - некоторые для старой таблицы, некоторые для новой таблицы.

Вы указываете, что таблицы "идентичны", поэтому я думаю, что это не проблемы для вашей конкретной ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...