属于动态SQL语句 在存储过程中需要按照动态SQL语句的写法具体写法可以百度

解决方案 »

  1.   

       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
      

  2.   


    create procedure aaa (in pSerial varchar(50))begin
    DECLARE var int;
    DECLARE msql varchar(500); SELECT `a`, `b`,`c` FROM t1 WHERE serial = pSerial;
    /*只要返回上面的数据就可以,下面的数据不返回*/SELECT `b` INTO var FROM t1 WHERE serial = pSerial;
    SET var = var + 1;
    SET @MyQuery=Concat('UPDATE `t1` SET `b` = ',var,' WHERE `serial` = ',pSerial); 
    PREPARE msql from @MyQuery; 
    EXECUTE msql; 
    end;
    现在问题是:
    1. 字段b,返回了更新后的数据
    2. SET var = var + 1;这里只是加1,可是查看数据后,变成加2
      

  3.   

    SELECT `b` INTO var FROM t1 WHERE serial = pSerial;
    SET var = var + 1;
    SET @MyQuery=Concat('UPDATE `t1` SET `b` = ',var,' WHERE `serial` = ',pSerial); select var;
    select @MyQuery;

    PREPARE msql from @MyQuery; 
    EXECUTE msql; 
    end;加上红字进行确定。
      

  4.   

    还是不行啊create table test1
    (
    Serial   varchar(10),
    a varchar(20),
    b int
    )
    insert into test1 select '111','a1',0
    insert into test1 select '222','a2',0现在要查询这条数据 '222','a2',0,要在查询完毕后,b字段递增1,
    第二次查询,结果是 '222','a2',1,
    第三次查询,结果是 '222','a2',2,
      

  5.   

    CREATE TABLE `test1`( `sn` VARCHAR(20), `a` VARCHAR(20), `b` INT ); 
    INSERT INTO `test1` (`sn`, `a`, `b`) VALUES ('111', 'a1', '0');
    INSERT INTO `test1` (`sn`, `a`, `b`) VALUES ('222', 'a2', '0'); DROP PROCEDURE IF EXISTS aaa;
    CREATE PROCEDURE aaa (IN pSerial VARCHAR(50))
     
    BEGIN
    DECLARE var INT;
    DECLARE msql VARCHAR(500); 
     
    SELECT `a`, `b` FROM test1 WHERE sn = pSerial;
    /*只要返回上面的数据就可以,下面的数据不返回*/
     
    SELECT `b` INTO var FROM test1 WHERE sn = pSerial;
    SET var = var + 1;
    SET @MyQuery=CONCAT('UPDATE `test1` SET `b` = ',var,' WHERE `sn` = ',pSerial); 
    select var;
    select @MyQuery;
    PREPARE msql FROM @MyQuery; 
    EXECUTE msql; 
    END;