В моей базе данных у меня есть около 30 таблиц, каждая из которых содержит столбец emp_number (INT)
.Обновить значение столбца во всей базе данных
Как обновить значение emp_number
во всех 30 таблицах?
В моей базе данных у меня есть около 30 таблиц, каждая из которых содержит столбец emp_number (INT)
.Обновить значение столбца во всей базе данных
Как обновить значение emp_number
во всех 30 таблицах?
Чтобы получить наилучший ответ, вы должны указать, какую СУБД вы используете. Несмотря на это, я считаю, что это довольно общее:
Вы можете получить список таблиц, которые содержат столбец с помощью INFORMATION_SCHEMA
:
select TABLE_SCHEMA, TABLE_NAME
from INFORMATION_SCHEMA.COLUMNS
where COLUMN_NAME = 'emp_number'
Затем используйте cursor
, чтобы пройти через список таблиц и динамически создавать и запускать операторы обновления для каждой таблицы.
Если вы используете MySQL, выполните следующее:
USE information_schema;
SELECT CONCAT('UPDATE ', table_name, ' SET emp_number = 30;')
FROM columns
WHERE table_schema = 'mydatabase'
AND column_name = 'emp_number'
Чтобы получить выход так:
Затем выполнить полученные запросы.
Если вам нужно запустить запрос с PHP или аналогичного, запишите его в хранимую процедуру.
Основная идея этого будет работать и с другими СУБД (возможно, потребуется настроить запрос) –
Вы можете использовать длинный один запрос, например:
UPDATE table1, table2, table3, ...
SET
table1.emp_number = 30,
table2.emp_number = 30,
table3.emp_number = 30,
...
Вот SQLFiddle.
Попробуйте это, если вы используете MS SQL:
sp_msforeachtable " UPDATE ? SET emp_number='YOUR VALUE'"
Делают это с помощью динамического SQL. Но будьте осторожны, если у вас есть отношение, определенное в этом столбце ' –
, я чувствую себя вынужденным сказать - проблема нормализации. вы можете воспользоваться этой возможностью, чтобы исправить схему. – Randy
Что такое сервер базы данных, который вы используете, SQL Server? SYBASE? ORACLE? ... – Surendra