Имя: Пароль:
IT
Веб-мастеринг
Можно ли так сделать в запросе sql
0 1ctube
 
18.04.23
09:28
Доброго времени суток. Вопрос по запросу на sql: есть БД. она содержит много таблиц, в каждой таблице произвольное количество полей. Необходимо найти значение допустим '74aa85c' и заменить его на '11aa79'. Оно может содержаться в любой таблице, в любом поле. Можно ли написать такой запрос, без указания конкретных таблиц и полей?
1 NorthWind
 
18.04.23
09:33
Скуль в общем случае заточен на структурированные данные, а это подразумевает, что вы точно знаете, где, что и на что менять.
Если нет, то реляционная модель данных не годится, нужна какая-нибудь другая. И скуль тоже не годится.
2 Волшебник
 
18.04.23
09:36
(0) Зачем?
3 NorthWind
 
18.04.23
09:42
не, ну если очень надо, то сделать, конечно, можно. В любой БД есть способ получить метаданные о наименованиях таблиц и столбцов - например, из системных представлений, как в оракле том же. Соответственно пишете скрипт, который запускает необходимое количество SQL-я по всем требуемым таблицам и столбцам, и дело в шляпе.
4 Грю
 
19.04.23
00:19
(0) Без процедур в запросе вряд ли получится. Одним запросом нужно вытащить названия таблиц, а другим запросом пробежаться по всем этим таблицам и обновить данные. Проблема в том, что название таблицы из результатов запроса нельзя подставить в другой запрос, без использования переменных. Поэтому только процедуры или вообще скрипт.

Еще, как вариант, отключить сервер SQL, и в файлах БД текстовым поиском заменить все нужные подстроки.
5 Garykom
 
19.04.23
00:28
(0) В общем случае нельзя.
Простейший вариант это зная имена всех таблиц и что в каждой таблице есть ключевое поле id.
Можно упростить работу путем выгрузки каждой таблицы (или даже всех разом) в sql-текст аля insert ... from  ...
Затем там сделать замену и изменив запрос на update ... where id=... выполнить его
6 Garykom
 
19.04.23
00:29
(5) *аля insert ... to ...
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.