mysql 更新库内所有表的某个字段置空

一.需求

        表设计不当,需要把库内所有表的某列varchar设置为null。

        设计可传参的存储过程,适合多个列置空。

二.创建存储过程和调用

        以下示例中“库名”以实际为准,也可传入变量。

         注意,表名在执行过程中是变量,需要用@sql进行拼接使用。

delimiter //                            #定义标识符为双斜杠
DROP PROCEDURE
IF EXISTS test ; #如果存在test存储过程则删除
CREATE PROCEDURE test (in columnName VARCHAR(35)) #创建无参存储过程,名称为test
BEGIN
	DECLARE
		tableName VARCHAR (32) ; #申明变量
DECLARE done INT DEFAULT 0;

DECLARE scene cursor for
		SELECT
			table_name 
		FROM
			information_schema. COLUMNS
		WHERE
			table_schema = "库名"
		AND column_name = columnName ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
open scene;
    REPEAT

	fetch scene into tableName;

		if  not done then
			set @sql=CONCAT('UPDATE ',tableName,' SET ', columnName,' = NULL' );
            PREPARE stmt from @sql;
            EXECUTE stmt; 
		END if;
    until done end repeat;
close scene;
commit;
END


//

# 运行存储过程
CALL test ('create_name') ;
CALL test ('update_name') ;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值