如何执行字串中的SQL语句,假设如下:
DECLARE strsql varchar(256);
DECLARE tablename varchar(32);
set tablename = '`test`.tb1';
set strsql = CONCAT('delete from ', tablename );
execute strsql;上面的写法到execute strsql;这一步就出错了,
该如何实现?

解决方案 »

  1.   

    PREPARE stmt1 FROM strsql;
    EXECUTE stmt1 
    DEALLOCATE PREPARE stmt1;
    手册中的例子如下。
      

  2.   

    DECLARE strsql varchar(256);
    DECLARE tablename varchar(32);
    set tablename = '`test`.tb1';
    set @strsql = CONCAT('delete from ', tablename );PREPARE stmt1 FROM @strsql;
    EXECUTE stmt1 
    DEALLOCATE PREPARE stmt1;
      

  3.   

    DELIMITER $$USE `hzyl`$$DROP PROCEDURE IF EXISTS `test`$$CREATE DEFINER=`root`@`%` PROCEDURE `test`()
    BEGINDECLARE tablename VARCHAR(32);
    SET tablename = '`test`.tb1';
    SET @strsql = CONCAT('select * from ', tablename );PREPARE sqlstmt FROM @strsql;   
    EXECUTE sqlstmt;
    DEALLOCATE PREPARE sqlstmt;   END$$DELIMITER ;
    这样可以
      

  4.   

    郁闷!预制语句的SQL语法不能被用于带嵌套的风格中。也就是说,被传递给PREPARE的语句本身不能是一个PREPARE, EXECUTE或DEALLOCATE PREPARE语句。我的语句使用了游标读取tablename后再删除表数据的
      

  5.   

    DECLARE tablename varchar(32);
    set tablename = '`test`.tb1';
    set @strsql = CONCAT('delete from ', tablename );
    prepare stmt from @strsql;
    execute stmt;
    deallocate prepare stmt;
      

  6.   

    奇怪为什么你这样写就通过了?只能
    prepare stmt from @strsql;
    不能
    prepare stmt from strsql;