2013-07-01 4 views
-3

В моей базе данных у меня есть около 30 таблиц, каждая из которых содержит столбец emp_number (INT).Обновить значение столбца во всей базе данных

Как обновить значение emp_number во всех 30 таблицах?

+0

Делают это с помощью динамического SQL. Но будьте осторожны, если у вас есть отношение, определенное в этом столбце ' –

+0

, я чувствую себя вынужденным сказать - проблема нормализации. вы можете воспользоваться этой возможностью, чтобы исправить схему. – Randy

+2

Что такое сервер базы данных, который вы используете, SQL Server? SYBASE? ORACLE? ... – Surendra

ответ

1

Чтобы получить наилучший ответ, вы должны указать, какую СУБД вы используете. Несмотря на это, я считаю, что это довольно общее:

Вы можете получить список таблиц, которые содержат столбец с помощью INFORMATION_SCHEMA:

select TABLE_SCHEMA, TABLE_NAME 
from INFORMATION_SCHEMA.COLUMNS 
where COLUMN_NAME = 'emp_number' 

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

+0

Да, но мне нужно было обновить запрос для обновления COLUMN во всей базе данных – Ahmed

+0

С этим запросом на обновление он должен отражать все значения столбцов во всех таблицах. – Ahmed

2

Если вы используете 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 или аналогичного, запишите его в хранимую процедуру.

+1

Основная идея этого будет работать и с другими СУБД (возможно, потребуется настроить запрос) –

3

Вы можете использовать длинный один запрос, например:

UPDATE table1, table2, table3, ... 
SET 
    table1.emp_number = 30, 
    table2.emp_number = 30, 
    table3.emp_number = 30, 
    ... 

Вот SQLFiddle.

2

Попробуйте это, если вы используете MS SQL:

sp_msforeachtable " UPDATE ? SET emp_number='YOUR VALUE'" 
Смежные вопросы