Mysql 有没有一种简单的方法来重命名过程中的表?
我使用的是MariaDB 10.1 SQLyog 11.5 我已经使用下面的查询重命名了表Mysql 有没有一种简单的方法来重命名过程中的表?,mysql,stored-procedures,mariadb,Mysql,Stored Procedures,Mariadb,我使用的是MariaDB 10.1 SQLyog 11.5 我已经使用下面的查询重命名了表 ALTER TABLE old_name RENAME new_name 但是有许多存储过程引用“old_name”。我已打开所有SP创建查询并进行了更改。因为我不知道哪个SP有一个引用旧\u name表的查询 有没有办法知道哪个SP有引用旧\u name表的查询?通过这种方式,您可以获取存储过程中可用的文本 请尝试此查询:(未验证) 参考此您可以这样做: 创建重命名查询 SELECT CONCAT
ALTER TABLE old_name RENAME new_name
但是有许多存储过程引用“old_name”。我已打开所有SP创建查询并进行了更改。因为我不知道哪个SP有一个引用旧\u name表的查询
有没有办法知道哪个SP有引用旧\u name表的查询?通过这种方式,您可以获取存储过程中可用的文本
请尝试此查询:(未验证)
参考此您可以这样做: 创建重命名查询
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;
仅用于验证
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;
从SysObjects中选择不同的O.[name],在C.Id=O.Id上加入SysComments C,其中C.[text]类似于“%old_name%”
这在MSSQL中起作用。对于MySQL,您可以使用信息\u模式。
相关表,这不是解决方案,但可能会让您有所了解您的答案正是我想要的!“您可以获取存储过程中可用的文本”也是一个很好的提示。谢谢你,阿鲁玛!!我想要的是一个SP列表,其中包含引用“old_name”表的查询。但是你给了我一个新的方法来重新命名表格。非常感谢。