mySql:在这个存储过程中 变量str和@var有什么区别.
存储过程如下
dlimiter $$
create procedure sp_1(taName @varchar(20))
begin
  declare str varchar(100);
  set str=concat('select*from ',taName);
  set @var =str;
  -- prepare stmat1 from str;  -- 这里直接这样是不行的.
  prepare stmat1 from @var;  -- 定义一个用户变量才行啊.
  
  execute stmat1;
end $$这里为什么str能生成预定义语句而@var能呢,他们的值都是一样的啊.

解决方案 »

  1.   

    不一样,MYSQL的@是临时的变量,除了特定的时候用@变量,一般的都不带@
    你这是一种特殊的用法,就是为了实现动态SQL,按这个格式用就可以了
      

  2.   

      晕,你也没理解啊.
      我将就说下你看下对不对啊:
      这段语句为什么这里不能用str而要用@var,这是因为str只存在服务器端里面,不能进行传递,也就是说不能传递到客户端来执行,但因为Execute这个方法执行的时候是需要把语句传递到客户端(理解:好象我们直接输入Select*from t这样的语句一样.),既然要传递就的用用户变量@var了.  在说明:@var 是用户变量,但用户连接到服务器存在,断开连接时自动销毁.