create procedure ... begin SET @sql=concat('INSERT INTO ',@tablename,' SELECT * From student'); prepare stmt1 from @sql; execute stmt1; deallocate prepare stmt1; end //
前面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 //
你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>
改成这样: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 //
SET @sql=concat('INSERT INTO ',@tablename,' SELECT * From student');
prepare stmt1 from @sql;
execute @sql;
deallocate prepare stmt1;
SET @sql=concat('INSERT INTO ',@tablename,' SELECT * From student' )
PREPARE stmt1 FROM @sql;
EXECUTE stmt1 ;
prepare stmt1 from @sql;
execute stmt1;
deallocate prepare stmt1;
mssqlserver里面的字符串连接可以用“+”,则mysql里面改成对应的concat函数即可;
mssqlserver里面的动态语句,在mysql里面用如下形式执行:
prepare xxx from 用户变量;
execute xxx;
deallocate prepare xxx;
另外像3楼的那sql code 那框框怎么搞的。
begin
SET @sql=concat('INSERT INTO ',@tablename,' SELECT * From student');
prepare stmt1 from @sql;
execute stmt1;
deallocate prepare stmt1;
end
//
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 //
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>
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 //
把declare sql varchar(200);去掉就好了。
谢谢大家了。