猿问

无法在过程循环中正确声明变量

这在驱赶我香蕉。无论如何,我不是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);

我的前额从撞到我的桌子上变得扁平了。


最终目标是将驱动器n_0,驱动器inf_0,驱动器n_1,驱动器inf_1等列一直添加到驱动器n_150和驱动器inf_150。分别为每个键入VARCHAR(30)和VARCHAR(48)。


宝慕林4294392
浏览 312回答 2
2回答

明月笑刀无情

我已经有多个表。基本上,我使用它来分类主机中的驱动器序列号。主机最多可以有150个驱动器。其他表包含网络接口信息(macaddrs等)。所有这些都由一个共同的索引值捆绑在一起。对于具有150个磁盘驱动器的系统,除了150列之外,我看不到其他方法。要么那个,要么我错过了一个基本概念。
随时随地看视频慕课网APP
我要回答