在sql server下,执行一个动态查询语句,并把语句中的game_score的结果输出。SET @SQL='SELECT @gamescore=game_score FROM dbo.' 
         + @game_table 
         + ' WHERE user_id=' 
         + cast(@userid as varchar(32))
EXEC sp_executesql @SQL,N'@gamescore int output',@gamescore=@game_score output 
-- 之后对输出的结果进行操作。如下
SET @game_score=@game_score+1;
IF @game_id >3
BEGIN
....
END现在要用mysql的过程去写这样的动态查询,并也要有个输出结果,如何操作。
MySQLSQL存储搓成 动态查询 参数输出

解决方案 »

  1.   

    补充一下:在mysql 中不事先声明,就能用的带'@',如set @num=1;set @name='wuc';这两个类型一样吗,是什么类型
      

  2.   

    http://www.cnblogs.com/end/archive/2011/04/01/2002658.html
      

  3.   

    MYSQL中用 concat(做字符串相连续。
    建议参考一下MYSQL官方免费手册中的语法说明,然后自己尝试改一下,如果有什么问题可以把你自己写的语句和错误提示一同贴出
      

  4.   

    参考:http://dev.mysql.com/doc/refman/5.5/en/user-variables.html
    用户定义变量的类型包括:integer, decimal, floating-point, binary or nonbinary string, or NULL value而且一个变量在使用过程中类型可以变化,如
    mysql> SET @a='test';
    mysql> SELECT @a,(@a:=20) FROM tbl_name;
    前者为字符串,后面又变成了整型。回到最初的问题,可以这样:
    SET @EXEC_SQL:=concat('SELECT @gamescore:=game_score FROM ', @game_table ,' WHERE user_id=cast(',@userid,' as varchar(32))');
    PREPARE stmt1 from @EXEC_SQL ;
    execute stmt1;
    deallocate prepare stmt1 ;SELECT @gamescore;直接使用即可
      

  5.   

    搞定:DECLARE u_SQL VARCHAR(1024);
    SET u_SQL =concat('SELECT game_score INTO @gamescore  FROM ', @game_table ,' WHERE user_id=',cast(@userid as char));-- 好像不能转到varchar。
      SET @v_sql=u_SQL;
      PREPARE run_sql FROM @v_sql;
      EXECUTE run_sql;
      DEALLOCATE PREPARE run_sql;
    -- 之后对输出的结果进行操作。如下
    SET @game_score=@game_score+1;
    IF @game_id >3
    BEGIN
    ....
    END自己做了小测试:
    用navicat建立的存储过程。 
    参数:IN in_table_name VARCHAR(30),IN in_where VARCHAR(30)
    BEGIN
      DECLARE u_SQL VARCHAR(1024);
      SET u_SQL=CONCAT('SELECT game_id,game_re,date INTO @u_id,@u_name,@u_date FROM ',in_table_name,' WHERE game_re like ''%',in_where,'%''');
      SET @v_sql=u_SQL;
      PREPARE run_sql FROM @v_sql;
    EXECUTE run_sql;
    DEALLOCATE PREPARE run_sql;   SET @u_name= CONCAT(@u_name,'游戏');
      SELECT @u_id AS game_id,@u_name AS game_name,@u_date AS add_date;
    END
    CALL sql_sel('t_game_table','四人');正常。
    主要注意的是MYSQL要用CONCAT(str,str,...)链接字符串。
    其中输出的参数要带“@”如@game。
    执行这个动态查询用: 
    PREPARE run_sql FROM @v_sql;
    EXECUTE run_sql;
    DEALLOCATE PREPARE run_sql;