我想用一个语句(查询)创建多个表。
Loop
start
(
create table a
)
a =a +1
end loop
所以说它必须创建100个标记为TABLE1
,TABLE2
,...的表格。
答案 0 :(得分:0)
请尝试以下步骤。
DROP PROCEDURE IF EXISTS `createTableProcTest`;
delimiter //
CREATE PROCEDURE `createTableProcTest`()
BEGIN
DECLARE count INT Default 0;
simple_loop: LOOP
SET @a := count + 1;
SET @statement = CONCAT('Create table Table',@a,' ( name VARCHAR(70), age int );');
PREPARE stmt FROM @statement;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET count = count + 1;
IF count=100 THEN
LEAVE simple_loop;
END IF;
END LOOP simple_loop;
END//
为了执行,只需执行以下操作:
Call createTableProcTest();
通过执行上述过程,将创建具有名称table1,...,table100的100个表。 表结构如下所示:
N:B:执行程序可能需要几秒钟。不要急躁。
答案 1 :(得分:-1)
您需要向我们提供更多详细信息,但我认为在循环内调用存储过程更容易创建过程。
您需要创建一个过程来创建所需的表,并在循环中调用此过程。
例如:
CREATE PROCEDURE SP_Create_Table(IN tableName VARCHAR(50))BEGIN SET @sql = CONCAT('CREATE TABLE',tableName,'(column1 INT(11))');
PREPARE stmt FROM @sql;执行stmt; DEALLOCATE PREPARE stmt; END
现在,在循环中调用create table过程
希望我能阻止你,DELIMITER //创建功能CalcIncome(starting_value INT)返回 INT BEGIN
DECLARE收入INT; SET收入= 0; label1:WHILE income< = 50 DO 调用SP_Create_Table(CONVERT(VARCHAR(50),starting_value));结束标签1;返回收入;结束; // DELIMITER;