CREATE  PROCEDURE `sendtalkmessage`(IN `gName` varchar(20),IN `sID` int,IN `mess` varchar(200))
BEGIN
  set @sqltext:=concat('insert into talk',gName,'(id,senderid,talkmessage) values (1,',sID,',',mess,')');
  prepare sqlstr from @sqltext;
  execute sqlstr;
END;解释下 我传进去的是群成员的表名,但是其实我需要用的是群消息表~ 如果insert的时候不添加talkmessage,也就是采用默认值的时候,不提示出错,而且成功传入。现在上面的那种写法,就提示1054 - Unknown column 'fad' in 'field list'

解决方案 »

  1.   

    SELECT @sqltext
    结果是什么注意字段类型
      

  2.   

    字符串需要用单引号括起来CREATE PROCEDURE `sendtalkmessage`(IN `gName` varchar(20),IN `sID` int,IN `mess` varchar(200))
    BEGIN
      set @sqltext:=concat('insert into talk',gName,'(id,senderid,talkmessage) values (1,',sID,',''',mess,''')');
      prepare sqlstr from @sqltext;
      execute sqlstr;
    end
    $
      

  3.   


    先谢谢你回答我,但是我不是很明白,为什么要多加两个单引号?我执行你这个代码之后就提示:
    1062 - Duplicate entry '1' for key 'PRIMARY'
      

  4.   

    mysql> select @sqltext;
    +---------------------------------------------------------------------+
    | @sqltext                                                            |
    +---------------------------------------------------------------------+
    | insert into talkgroup4(id,senderid,talkmessage) values (1,2,'sefs') |
    +---------------------------------------------------------------------+
      

  5.   

    字符型数据必须用‘引号来标识。所有需要加'的INSERT语句总是固定的插入1,当然会导致主键冲突。 set @sqltext:=concat('insert into talk',gName,'(id,senderid,talkmessage) values (1,',sID,',''',mess,''')');
      

  6.   


    如果一个' MYSQL根本不知道你的是当前字符串的结束,还是什么。 所以约定连续两个 '' 被解释成一个' 而不是字符串的终结。
      

  7.   

    参考下面手册 中的例子。MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html