【发布时间】:2018-10-21 07:06:06
【问题描述】:
这让我很生气。无论如何,我都不是 mysql 大师。我的目标是向表中添加大量列。我已经尝试了几种方法,并且程序在 DECLARE @FooA NVARCHAR(MAX); 上阻塞。不知道为什么。
感谢任何指点...
USE mydatabase;
DELIMITER $$
DROP PROCEDURE IF EXISTS RepeatLoopProc$$
CREATE PROCEDURE RepeatLoopProc()
BEGIN
DECLARE x INT;
DECLARE sn VARCHAR(30);
DECLARE dr VARCHAR(48);
DECLARE @FooA NVARCHAR(MAX);
SET x = 0;
WHILE (x <= 150) DO
SET sn = CONCAT('drivesn_', x);
SET dr = CONCAT('driveinf_', x);
SET x = x + 1;
SET @FooA = 'ALTER TABLE DRIVE_MASTER ADD ' + sn + ' VARCHAR(30), ADD ' + dr + ' VARCHAR(48)';
EXEC sp_executesql @FooA;
END WHILE;
END$$
DELIMITER ;
当我这样做时,我得到:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@FooA NVARCHAR(MAX);
我的额头因为撞到我的桌子上而变得扁平。
最终目标是将列 driven_0、driveinf_0、drivesn_1、driveinf_1 等一直添加到 driven_150 和 driveinf_150。分别输入 VARCHAR(30) 和 VARCHAR(48)。
【问题讨论】:
-
MySQL 不使用
+连接字符串,你必须使用CONCAT()函数。 -
如果您要向表中添加大量相似的列,则您的架构可能设计不佳。重复的元素应该在行中,而不是在列中。
标签: mysql linux centos6 declare