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