更改列名的动态过程
Posted
技术标签:
【中文标题】更改列名的动态过程【英文标题】:Dynamic procedure to change Column name 【发布时间】:2018-06-05 01:28:46 【问题描述】:我需要创建一个动态过程,以便每当我需要重命名表的列时,我都会传递所需的参数,并且它可以正确执行。所以IF的验证。
这段代码产生的错误如下:
您的 SQL 语法有错误;检查手册 对应于您的 mysql 服务器版本,以便使用正确的语法 'IF EXISTS (SELECT * FROM information_schema.columns WHERE 第 1 行的 table_name = 'People''
DROP PROCEDURE IF EXISTS `change_column_name`;
DELIMITER ;;
CREATE PROCEDURE `change_column_name`(IN tableName VARCHAR(100), IN columnName VARCHAR(100), IN newColumnName VARCHAR(100), IN columnType VARCHAR(20), IN defaultValue VARCHAR(100))
BEGIN
SET @query = CONCAT('IF EXISTS (SELECT * FROM information_schema.columns WHERE table_name = \'', tableName, '\' AND column_name = \'', columnName, '\') THEN
ALTER TABLE \'', tableName, '\' CHANGE COLUMN \'', columnName, '\' \'', newColumnName, '\' ', columnType, ' DEFAULT ', defaultValue, ';
END IF;');
PREPARE stmt1 FROM @query;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END ;;
DELIMITER ;
CALL `change_column_name`('People', 'Nme', 'Name', 'VARCHAR(50)', 'NULL');
【问题讨论】:
iF EXISTS(SELECT .... 是 SQL 服务器语法 @RaymondNijland Nop。如果您保留相同的代码并删除参数,请将所有内容更改为硬编码即可。 你使用concat函数的方式是对它进行SQL server语法搜索 @RaymondNijland 好的,那为什么删除参数并保持硬编码会起作用? 不要相信生成的字符串变量@qeury 仅包含无效的 MySQL 语法。您需要将 SELECT 和 ALTER 表查询分开才能在 MySQL 中工作。我现在不能写答案,因为我现在正在打电话 【参考方案1】:已解决,步骤的方式不对。
DROP PROCEDURE IF EXISTS `change_column_name`;
DELIMITER ;;
CREATE PROCEDURE `change_column_name`(IN tableName VARCHAR(100), IN columnName VARCHAR(100), IN newColumnName VARCHAR(100), IN columnType VARCHAR(20), IN defaultValue VARCHAR(100))
BEGIN
IF EXISTS (SELECT * FROM information_schema.COLUMNS WHERE table_name = tableName AND column_name = columnName) THEN
SET @query = CONCAT('ALTER TABLE `', tableName, '` CHANGE COLUMN `', columnName, '` `', newColumnName, '` ', columnType, ' DEFAULT ', defaultValue, ';');
PREPARE stmt1 FROM @query;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END IF;
END ;;
DELIMITER ;
CALL `change_column_name`('People', 'Nme', 'Name', 'VARCHAR(50)', 'NULL');
【讨论】:
以上是关于更改列名的动态过程的主要内容,如果未能解决你的问题,请参考以下文章