用navicat 写的BEGIN
DECLARE cc varchar(200);
update lastmsg set curpostime=tcurpostime,latitude=tlatitude,longitude=tlongitude,speed=tspeed where gpssn=tgpssn;
if insertflag='1' then
SET cc=concat('insert into t'+ tgpssn+' (curpostime,latitude,longitude,speed) values('''+tcurpostime+''','''+tlatitude+''','''+tlongitude+''','''+tspeed+''')');
SET @SQLString=cc;
PREPARE  stmt from @SQLString;
    EXECUTE  stmt;
    commit;
end IF;
END参数:IN `tcurpostime` varchar(19),IN `tlatitude` varchar(12),IN `tlongitude` varchar(12),IN `tspeed` varchar(5),IN `tgpssn` varchar(20),IN  `insertflag` varchar(1)
运行提示错误:Procedure execution failed
1292 - Truncated incorrect DOUBLE value: '')'

解决方案 »

  1.   

    navicat的问题   你可以直接用命令行来做
      

  2.   

    DELIMITER $$
    CREATE PROCEDURE ff()
    BEGIN
    DECLARE cc VARCHAR(200);
     UPDATE lastmsg SET curpostime=tcurpostime,latitude=tlatitude,longitude=tlongitude,speed=tspeed WHERE gpssn=tgpssn;
    IF insertflag='1' THEN
    SET cc=CONCAT('insert into t'+ tgpssn+' (curpostime,latitude,longitude,speed) values('''+tcurpostime+''','''+tlatitude+''','''+tlongitude+''','''+tspeed+''')');
    SET @SQLString=cc;
    PREPARE stmt FROM @SQLString;
       EXECUTE stmt;
      COMMIT;
    END IF;
    END$$
    DELIMITER ;
      

  3.   

    你的表lastmsg中的字段都是什么数据类型? 你的错误提示是数据转换有问题,你的参数全是 varchar, 而表中字段应该是有 数字型的。desc lastmsg
    desc t'+ tgpssn+' 相关的表贴出以供分析。