存储过程中可以使用alter table语句吗?

来源:百度知道 编辑:UC知道 时间:2024/06/21 19:06:20
我写了一个存储过程,先建一张临时表temp_wlcrk,然后再用alter table语句添加一个字段dw_na,最后再写一个游标,从另外一张表iecusuh取数据写入dw_na字段里,当执行存储过程时,新增的字段并没有添加到temp_wlcrk里,提示dw_na无效列名,当然游标也就没能把数据添加进去,请大侠帮小弟看下,是什么原因,不胜感激,代码如下:
create proc pro_wlcrk2
@date1 datetime,
@date2 datetime
as
begin
drop table temp_wlcrk
end
select a.mt_code,b.class,a.mt_list ,a.mt_date,a.el_no ,c.el_name1,c.el_size,a.mt_qty,a.mt_qty1,a.mt_area,
d.mt_name,a.mt_seq,a.bin_no,a.su_no,a.sc_odno,a.mt_refr,a.lot_no,a.mt_sucu into temp_wlcrk from iemt03d1 a,
temp_mt_code b,ieel00h c,iepb07h d
where a.mt_code=b.code and a.el_no=c.el_no and a.mt_area=d.mt_area and
a.mt_date between @date1 and @date2

alter table temp_wlcrk add dw_na char(40)
update temp_wlcrk set dw_na=''
declare @cu_na1 char(60),@cu_no1 char(30)
declare cursor_wldw1 cursor for
select cu_no,cu_na from iecusuh
open cursor_wldw1
fetch next from cursor_wldw1 into @cu_no1,@cu_na1
while(@@f

看来你很少用sql啊~你这代码写得~~~先帮你找出几个最大的毛病吧:
1、create proc pro_wlcrk2
@date1 datetime,
@date2 datetime
as
begin
drop table temp_wlcrk
end你这里直接就end了那你过程不就到此结束了?把end移到倒数第二行去!
2、alter table temp_wlcrk add dw_na char(40) 你这里不用指定他为空不为空?
alter table temp_wlcrk add dw_na char(40) not null
3、fetch next from cursor_wldw1 into @cu_no1,@cu_na1 你确定游标的语法没问题?

补充:看来你真是刚用sql,一般涉及到对表结构的处理不提倡在过程中实现!至于你这个测试为啥不成功呢?你这么测试下看看有啥不一样:
create proc pro_addcolumn2
as
begin
if exists (select 1 from sysobjects where name = 'ddd')
drop table ddd
create table ddd ( dd char(4),dd2 char(4) default 0)
insert into ddd(dd,dd2)values ('1','a')
insert into ddd(dd,dd2)values ('2','b')
insert into ddd(dd,dd2)values ('3','c')
alter table ddd add dd3 char(4) null
select * from ddd
end
go
然后你分别执行:
exec pro_addcolumn2

select * from ddd