Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Обновление одинаковых полей разных таблиц  [new]
Strength Class
Member

Откуда:
Сообщений: 51
Здравствуйте.

В БД за некоторое время накопились ошибочные данные. Их необходимо исправить.

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

Подскажите, пожалуйста, возможно ли в одном запросе UPDATE обновить несколько полей (с одинаковыми названиями и типом), принадлежащих разным таблицам? В описании UPDATE написано, что в UPDATE может быть использована только одна таблица. Можно ли обойти это ограничение? Возможно ли использование какой-нибудь другой альтернативы к UPDATE?
12 янв 15, 13:05    [17105499]     Ответить | Цитировать Сообщить модератору
 Re: Обновление одинаковых полей разных таблиц  [new]
TempFox
Guest
А каскадный UPDATE у Вас не работает?
12 янв 15, 13:09    [17105529]     Ответить | Цитировать Сообщить модератору
 Re: Обновление одинаковых полей разных таблиц  [new]
Glory
Member

Откуда:
Сообщений: 104751
Strength Class
Подскажите, пожалуйста, возможно ли в одном запросе UPDATE обновить несколько полей (с одинаковыми названиями и типом), принадлежащих разным таблицам?

Нельзя

Strength Class
В описании UPDATE написано, что в UPDATE может быть использована только одна таблица. Можно ли обойти это ограничение?

Нельзя
Можно "спрятать" за одной командой UPDATE другие команды UPDATE. Например, используя триггер


Strength Class
ожно, конечно, для каждой таблицы для каждого неправильного значения прописать отдельную инструкцию UPDATE, но хотелось бы, чтобы код был компактным и читаемым.

Зачем это для разовой задачи ?
12 янв 15, 13:10    [17105531]     Ответить | Цитировать Сообщить модератору
 Re: Обновление одинаковых полей разных таблиц  [new]
Strength Class
Member

Откуда:
Сообщений: 51
TempFox,

каскадный UPDATE, наверное, не подойдёт, т.к. мне обновлять данные нужно во всех таблицах, кроме ОТ, а в ОТ нужно удалить соответствующую запись.
12 янв 15, 13:55    [17105839]     Ответить | Цитировать Сообщить модератору
 Re: Обновление одинаковых полей разных таблиц  [new]
iap
Member

Откуда: Москва
Сообщений: 47085
Strength Class
TempFox,

каскадный UPDATE, наверное, не подойдёт, т.к. мне обновлять данные нужно во всех таблицах, кроме ОТ, а в ОТ нужно удалить соответствующую запись.
Проапдейтить данные в основной таблице (чтобы в подчинённых каскадно проапдейтились),
а потом удалить записи из основной невозможно?

Правда, сама задача изложена как-то туманно...
Что это за "ошибочно введённые" данные...
По мне так надо ничего апдейтить, а только удалять.
Что же будет с внешними ссылками, если из основной таблицы записи удалить?
FK не даст это сделать произвольно. Так зачем апдейтить?
12 янв 15, 14:07    [17105901]     Ответить | Цитировать Сообщить модератору
 Re: Обновление одинаковых полей разных таблиц  [new]
Glory
Member

Откуда:
Сообщений: 104751
iap
Проапдейтить данные в основной таблице (чтобы в подчинённых каскадно проапдейтились),
а потом удалить записи из основной невозможно?

ТС не собирается изменять мастер-таблицу.
ТС хочет во множестве дочерних таблиц поменять один существующий FK на другой существующий FK
Просто ТС хочет сделать это одной командой сразу вовсех дочерних таблицах.
12 янв 15, 14:11    [17105925]     Ответить | Цитировать Сообщить модератору
 Re: Обновление одинаковых полей разных таблиц  [new]
Strength Class
Member

Откуда:
Сообщений: 51
iap,

смысл в следующем. У оператора в выпадающем списке есть следующие значения: a, b, c, d, ... Оператор был слепенький не нашел нужный ему элемент в списке и ввёл свой, например, кривенький аа, которого в природе не существует и по сути равный b. Но в основную таблицу это значение попало, ссылочка по таблицам расползлась. За приличное время таких <<косяков>> накопилось много и их нужно убрать. Поэтому просто так данные удалить нельзя.
12 янв 15, 14:19    [17105995]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить