存储过程的问题
ALTER   PROCEDURE   dbo.StoredProcedure4     	 
 AS 
 	Declare   @TableVar   Table 
 (u_name   varchar(50),u_sex   varchar(2)) 
 declare   @mm   varchar(5) 
 select   *   into   #bonus1   from   bonus   order   by   b_date 
 select   DISTINCT   RTRIM(DATEPART(mm,   bonus.b_date))   +    '月 '   AS   mm   into   #bonus2   from   bonus 
 while   exists(select   *   from   bonus2) 
 begin 
 select   top   1   @mm=mm   from   bonus2 
 alter   table   @TableVar   add   @mm   varchar(5)   null 
    DELETE   FROM   bonus2   where   mm=@mm       
 end 
 RETURN    
 为什么会提示说@TableVar附近有语法错误
------解决方案--------------------Declare @TableVar Table 
 Table必须指定关键参数,与 CREATE TABLE 中定义表所用的信息子集相同的信息子集。表声明包括列定义、名称、数据类型和约束。允许的约束类型仅为 PRIMARY KEY、UNIQUE KEY 和 NULL。   
------解决方案--------------------对于表名,不可以用参数,如: 
 declare @tb varchar(20) 
 set @tb= 'carinfo ' 
 select * from @tb 
 =======================sql的错误: 
 服务器: 消息 137,级别 15,状态 2,行 3 
 必须声明变量  '@tb '。     
 所以,表名不能使用参数的...
------解决方案--------------------Table 是SQL 里的关键字; 
 Declare @TableVar char(20) 或者 Declare @TableVar varchar(20) 
 就可以了;
------解决方案--------------------alter table [tablename] add ...这个语法是用于向实体表添加一列,在这个存储过程中 
 @TableVar是一个临时表,所以alter table @TableVar add @mm varchar(5) null是错误的, 
 而用alter table [@TableVar] add @mm varchar(5) null,则是将 "@TableVar "做为实体表名而不是表变量,所以也是错误的. 
 在这个存储过程中,没看明白@TableVar是用来做什么的,好像没有什么作用吧??