带循环的动态添加列

时间:2013-11-20 22:15:35

标签: mysql loops stored-procedures repeat

我想创建一个动态过程,它将自动为我生成列但有些错误。我必须在我的程序中执行此操作几次,我真的不想手动执行此操作。

那就是我之前使用过的代码

    DELIMITER $$
DROP PROCEDURE IF EXISTS RepeatLoopProc$$
CREATE PROCEDURE RepeatLoopProc()
  BEGIN
          DECLARE x  INT;
          DECLARE str  VARCHAR(255);
          Declare @sql nvarchar(4000);
          SET x = 0;

          REPEAT
                      SET str =  '';
                      SET  str = CONCAT(str,'ossz_levon_het_',x);
                      SET  x = x + 1;
                      set @sql='ALTER TABLE telephelyi_teszt ADD '+ str +'DOUBLE NULL';

                      execute @sql;
          UNTIL x  > 50
          END REPEAT;

  END$$
DELIMITER ;

我在Declare @sql nvarchar(4000);行附近有任何想法的语法错误?

1 个答案:

答案 0 :(得分:2)

  • 使用DECLARE在存储过程中创建局部变量时,请勿使用@前缀。这些是会话变量。

  • 但你无论如何都不应该声明变量。准备好的语句不适用于局部变量,只适用于会话变量。您不必声明会话变量。

  • 您的ALTER TABLE语句有错误。你没有在列名之后和DOUBLE之前放置一个空格。换句话说,语句将如下所示,这将导致执行语法错误。

    ALTER TABLE telephelyi_teszt ADD ossz_levon_het_1DOUBLE NULL
    
  • 您没有预备声明。您不能只是将字符串EXECUTE作为语句。请参阅prepared statements手册中的示例。

  • 在任何具有相同内容的表中创建50列可能是糟糕的设计。考虑创建第二个表,其中一列ossz_levon_het和一个引用回到父表telephelyi_teszt。这是First Normal Form建议避免重复列组。