以下查询返回多个表名。
SET @var2 = 'col1';
SELECT table_name
FROM information_schema.columns
WHERE table_schema = 'db1'
and column_name like @var2
我需要将table_name的值存储在数组中并通过UPDATE语句循环它。所以我试着这样。 [重写以上查询]
SELECT table_name into @var3
FROM information_schema.columns
WHERE table_schema = 'db1'
and column_name like @var2
UPDATE @var3 SET @var2='Test' WHERE 1=1
实际上UPDATE语句必须运行表计数的次数。
我收到错误,因为var3不能容纳很多值。所以我希望它是一个数组,因此通过UPDATE语句循环它。有什么想法要继续吗?
答案 0 :(得分:1)
我认为你需要在你的存储过程中循环游标。像这样的东西,
DECLARE t_name VARCHAR(100);
DECLARE not_found_t_names INT DEFAULT 0;
DECLARE cur_table_names CURSOR FOR
SELECT table_name
FROM information_schema.columns
WHERE table_schema = 'db1'
and column_name like @var2
DECLARE CONTINUE HANDLER FOR NOT FOUND SET not_found_t_names = 1;
OPEN cur_table_names;
SET not_found_t_names = 0;
t_name_loop : LOOP
FETCH cur_table_names INTO t_name;
IF not_found_t_names THEN
CLOSE cur_table_names;
LEAVE t_name_loop;
END IF;
SET @update_stmt = CONCAT('UPDATE ',t_name,' SET ',@var2,'=Test WHERE 1=1');
PREPARE stmt FROM @update_stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP;
由于您正在使用变量中的结构元素,因此有点棘手,因此您需要正确执行concat
。我没有一个测试环境的环境,所以如果有任何修复的话,请自行修改语法,但这是我认为的方法。应该工作,祝你好运!