在存储过程中:
怎么把下面这转化为mysql;
declare @sql varchar(200)
SET @sql='INSERT INTO '+@tablename+' SELECT * From student'
EXEC(@sql)

解决方案 »

  1.   

    改成这样则效果相同:
    SET @sql=concat('INSERT INTO ',@tablename,' SELECT * From student');
    prepare stmt1 from @sql;
    execute @sql;
    deallocate prepare stmt1;
      

  2.   

    declare @sql varchar(200) 
    SET @sql=concat('INSERT INTO ',@tablename,' SELECT * From student' )
    PREPARE stmt1 FROM @sql;
    EXECUTE stmt1 ;
      

  3.   

    搞快了,应该这样:SET @sql=concat('INSERT INTO ',@tablename,' SELECT * From student');
    prepare stmt1 from @sql;
    execute stmt1;
    deallocate prepare stmt1;
      

  4.   

    一楼正解。既然是 @sql 则无需再declare 定义另外运行完应该用 deallocate 释放。
      

  5.   

    说明:
    mssqlserver里面的字符串连接可以用“+”,则mysql里面改成对应的concat函数即可;
    mssqlserver里面的动态语句,在mysql里面用如下形式执行:
    prepare xxx from 用户变量;
    execute xxx;
    deallocate prepare xxx;
      

  6.   

    图片看不到。CSDN上显示图片比较有问题。
      

  7.   

    不行,这是出错信息。UP.
    另外像3楼的那sql code 那框框怎么搞的。
      

  8.   

    能直接贴你的SQL语句文本吗? 否则别人还得照你的打一遍。图看不到的原因估计是baidu的防盗链功能。
      

  9.   

    create procedure ...
    begin
    SET @sql=concat('INSERT INTO ',@tablename,' SELECT * From student');
    prepare stmt1 from @sql;
    execute stmt1;
    deallocate prepare stmt1;
    end
    //
      

  10.   

    前面mysql>我省略了哦。
    delimiter //
    create procedure asdf(tablename varchar(200))
    begin
    declare sql varchar(200);
    SET @sql=concat('INSERT INTO ',@tablename,' SELECT * From student');
    prepare stmt1 from @sql;
    execute stmt1;
    deallocate prepare stmt1;
    end //
      

  11.   

    你17楼的语句和你的错误图片中的并不一样!你17楼的语句测试正常。mysql> delimiter //
    mysql> create procedure asdf(tablename varchar(200))
        -> begin
        ->  SET @sql=concat('INSERT INTO ',@tablename,' SELECT * From student');
        ->  prepare stmt1 from @sql;
        ->  execute stmt1;
        ->  deallocate prepare stmt1;
        -> end //
    Query OK, 0 rows affected (0.53 sec)mysql>
      

  12.   

    改成这样:delimiter //
    create procedure asdf(tablename varchar(200))
    begin
    -- declare sql varchar(200);
    SET @sql=concat('INSERT INTO ',@tablename,' SELECT * From student');
    prepare stmt1 from @sql;
    execute stmt1;
    deallocate prepare stmt1;
    end //
      

  13.   

    即declare定义语句那里去掉就行了
      

  14.   

    19楼正解。
    把declare sql varchar(200);去掉就好了。
    谢谢大家了。