帮我看看这存储过程哪里不对?

来源:百度知道 编辑:UC知道 时间:2024/05/18 22:44:08
use northwind;
go

create procedure AddColumnCountry
as
alter table shippers
add country varchar(70);

update shippers
set country = 'china';

select *
from shippers;

go

提示错误:列名 'country' 无效。
在每个sql子句后面加go也没用。。

首先纠正一下一楼的“ 顺德迷途羔羊”:alter table shippers
add COLUMN country varchar(70) 。。。您还需要学习SQL的基础东西

修改如下(该过程在SQL2000中测试已经通过):
use northwind;
go
create proc AddColumnCountry
as
declare @add varchar(2000)
declare @update varchar(2000)
set @add='alter table shippers add country varchar(70)'
set @update='update shippers set country=''china'''
exec (@add)
exec (@update)

楼主的写法错误,是因为你把存储过程的执行逻辑理解错了。
以你的写法为例,创建存储过程的时候,添加字段,先拿country字段和表shippers做比较,看是否存在。接下来update,是看shippers表中是否存在country字段,而不是先执行alter,再执行update

创建存储过程的时候,他只是检查每个语句是否错误,但是并没有执行该语句,所以会提示“列名 'country' 无效”。

【这里重在拼凑SQL语句】

alter table shippers
add country varchar(70)
这句错了,
应该是这样的
alter table shippers
add COLUMN country varchar(70)