CREATE DEFINER=`root`@`%` PROCEDURE `批量修改数据库中某个字段的值`(IN `oldData` VARCHAR(50),IN `newData` VARCHAR(50),IN `fieldName` VARCHAR(50),IN `databaseName` VARCHAR(50))
BEGIN
#Routine body goes here...
-- 定义循环条件
DECLARE flag INT DEFAULT 0;
-- 保存表名
DECLARE tname VARCHAR(50);
-- 查询数据库databaseName中含有fieldName列的表,如果区分大小写使用binary COLUMN_NAME = 'userId'
DECLARE result CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.Columns WHERE TABLE_SCHEMA = databaseName AND COLUMN_NAME = fieldName;
-- 退出循环
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET flag = 1;
-- 打开游标
OPEN result;
WHILE flag <> 1 DO
-- 游标指向下一个位置,可以有多个数据,比如FETCH result INTO tname,ttype,...;
FETCH result INTO tname;
-- 拼接字符串表名sql,根据需要使用CONCAT函数连接
-- SET @execSql = CONCAT('SELECT * FROM ',tname,' WHERE imei = ',oldImei,' ;');
SET @execSql = CONCAT('UPDATE ', tname, ' SET ',fieldName,' = ',"'",newData,"'",' WHERE ',fieldName,' = ',"'",oldData,"'",';');
PREPARE stmt FROM @execSql;
EXECUTE stmt;
END WHILE;
END
调用方式:
CALL 批量修改数据库中某个字段的值('旧值','新值','字段名','数据库名');
参数详解:
oldData: 旧字段值
newData: 新字段值
fieldName: 字段名
databaseName: 数据库名称
mysql过程函数:批量修改数据库中某个字段的值
猜你喜欢
转载自blog.csdn.net/zjb1697922408/article/details/128547535
今日推荐
周排行