2016-05-26 2 views
2

Я использую MariaDB 10.1 SQLyog 11.5Есть ли простой способ переименовать таблицу в процедуре?

Я переименовал таблицу, используя следующий запрос.

ALTER TABLE old_name RENAME new_name 

Но есть много хранимых процедур, которые ссылаются на «old_name». Я открыл весь запрос создания SP и изменил его. Потому что я не знаю, у какого SP есть запрос, который ссылается на таблицу old_name.

Есть ли способ узнать, у какого SP есть запросы, ссылающиеся на таблицу old_name?

+0

'SELECT DISTINCT O. [название] SysObjects O РЕГИСТРИРУЙТЕСЬ SysComments C ON C.Id = O.Id WHERE C. [текст] LIKE '% old_name%' 'работает в MSSQL. Для MySQL вы можете использовать связанные таблицы 'INFORMATION_SCHEMA.', это не решение, но может дать вам некоторое представление. – Arulkumar

ответ

1

К этому INFORMATION_SCHEMA.ROUTINES вы можете получить текст, доступный в хранимой процедуре

Пожалуйста, мог бы попробовать этот запрос: (не проверено)

SELECT ROUTINE_NAME 
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE ROUTINE_DEFINITION LIKE '%old_name%' 
     -- AND ROUTINE_TYPE = "PROCEDURE" -- Filter only if need SPs 
ORDER BY ROUTINE_NAME; 

Ссылка из этого page

+1

Ваш ответ - именно то, что я хочу! «Вы можете получить текст, доступный в хранимой процедуре», также является отличным советом. Спасибо, Арулмумар! – passion053

+0

Рад, он решает вашу проблему :) – Arulkumar

0

Вы можете он делает следующее:

Создание ПЕРЕИМЕНОВАТЬ запросов

SELECT CONCAT ('RENAME TABLE ', 
    GROUP_CONCAT(t.TABLE_SCHEMA,'.',t.TABLE_NAME,' TO ', t.TABLE_SCHEMA,'.',REPLACE(t.TABLE_NAME,'old','NEW') SEPARATOR ' , ') 
) INTO @sql 
FROM information_schema.TABLES t 
WHERE t.TABLE_TYPE = 'BASE TABLE' 
AND t.TABLE_SCHEMA IN ('SCHEMA1','SCHEMA2') 
AND t.TABLE_NAME LIKE 'old_table%'; 

ТОЛЬКО для проверки

SELECT @sql; 

Подготовить и выполнить его

PREPARE stmt FROM @SQL; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
+0

Что мне нужно - это список SP, содержащий запрос, который ссылается на таблицу «old_name». Но вы указали мне новый способ сделать предложения RENAME TABLE. Спасибо. – passion053

Смежные вопросы