搞死人的错误:列名无效,明明都在啊!

LWH006 2004-08-15 03:14:22
---------------------
运行下面代码会出错:
服务器: 消息 207,级别 16,状态 1,过程 TEST,行 7
列名 'FLD3' 无效。
---------------------
create procedure TEST
AS

create table #TEMP (FLD1 char(10),FLD2 char(10))
insert into #TEMP (FLD1,FLD2) values ('xxx','yyyy')
exec ('alter table #TEMP add FLD3 int')
update #TEMP set FLD3=6789
drop table #TEMP
GO

exec TEST
drop procedure TEST
---------------------

以前也出现过这样的错误,我就把 alter table #TEMP add FLD3 int 加一层外壳 exec ('...')
可今天不灵了,不知道真正的原因. 请各位大侠帮忙诊断一下. 谢谢了!
...全文
161 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
rea1gz 2004-08-15
  • 打赏
  • 举报
回复
其实这样子:

create procedure TEST
AS

declare @updatevar1 int
declare @updatevar2 varchar(20) --两个参数示例
set @updatevar1=1
set @updatevar2='Just a Test'



create table #TEMP (FLD1 char(10),FLD2 char(10))
insert into #TEMP (FLD1,FLD2) values ('xxx','yyyy')
exec ('alter table #TEMP add FLD3 int,FLD4 varchar(20)')
declare @sql nvarchar(2000)
set @sql=N'update #TEMP set FLD3=@Var1,FLD4=@Var2'
exec sp_executesql @sql,N'@Var1 int,@Var2 varchar(20)',@updatevar1,@updatevar2

select * from #TEMP

drop table #TEMP
GO

exec TEST
drop procedure TEST


ok?


LWH006 2004-08-15
  • 打赏
  • 举报
回复
想不到这么多朋友关注此问题,谢了谢了!
TO lxysjl(流星雨): 这是在构建一个procedure中,加了GO就表示procedure结束了,可事实上我还没有结束。
TO lanshen(能量建造者) :同上。
TO cqlyzz(云卷云舒) :你是张洪举吗?
TO rea1gz(冒牌realgz V0.2):你的方法有效!可是呢,在我真正应用的update里,要用到好多变量,这样的话要先构建一个字串,而不能直接代入变量。不过这的确是有效的方法之一。

问题的本质是,出现这个问题的原因是什么,总得有一个理论上的依据啊。糊里糊涂.....



今天下午我被逼急了,用了另一个方法,就是把最大可能需要的字段先统统加上。在最后,再把不需要的字段drop掉。(本来在procedure里,会依据不同的情形加上不同的字段的。)
zhangzs8896 2004-08-15
  • 打赏
  • 举报
回复
学习!
rea1gz 2004-08-15
  • 打赏
  • 举报
回复
create procedure TEST
AS

create table #TEMP (FLD1 char(10),FLD2 char(10))
insert into #TEMP (FLD1,FLD2) values ('xxx','yyyy')
exec ('alter table #TEMP add FLD3 int')
exec ('update #TEMP set FLD3=6789') --
drop table #TEMP
GO

exec TEST
drop procedure TEST


ok?
lanshen 2004-08-15
  • 打赏
  • 举报
回复
create table #TEMP (FLD1 char(10),FLD2 char(10))
insert into #TEMP (FLD1,FLD2) values ('xxx','yyyy')
exec ('alter table #TEMP add FLD3 int')
GO //这个GO不能省
update #TEMP set FLD3=6789
drop table #TEMP
GO
exingsa 2004-08-15
  • 打赏
  • 举报
回复
UP
cqlyzz 2004-08-15
  • 打赏
  • 举报
回复
UP
lxysjl 2004-08-15
  • 打赏
  • 举报
回复
create procedure TEST
AS

create table #TEMP (FLD1 char(10),FLD2 char(10))
insert into #TEMP (FLD1,FLD2) values ('xxx','yyyy')
exec ('alter table #TEMP add FLD3 int')
go
update #TEMP set FLD3=6789
drop table #TEMP
GO

exec TEST
drop procedure TEST

这样试一下,呵
zhangzs8896 2004-08-15
  • 打赏
  • 举报
回复
试了一下,也没结果,帮顶!
同时关注!
LWH006 2004-08-15
  • 打赏
  • 举报
回复
谢谢 sankis、btut2004二位的回答。
可是还是不行的。
可是我还不会转换为utf-8 ,多谢指教!
张海霖 2004-08-15
  • 打赏
  • 举报
回复
alter table #TEMP add FLD3 int
不加exec试了吗
alter table #TEMP add [FLD3] int
试一下
把你的所有语句转换成utf-8试一下
sankis 2004-08-15
  • 打赏
  • 举报
回复
create table #TEMP (FLD1 char(10),FLD2 char(10))
insert into #TEMP (FLD1,FLD2) values ('xxx','yyyy')
exec ('alter table #TEMP add FLD3 int')
select * from #temp
update #TEMP set FLD3=6789
drop table #TEMP
GO

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧