日期:2014-05-19  浏览次数:20844 次

存储过程的问题
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是用来做什么的,好像没有什么作用吧??