日期:2014-05-18  浏览次数:20542 次

sqlserver2000的疑惑,为什么不按顺序执行呢?
我sql很菜,最近写了个小脚本让我很疑惑,语句如下:
alter table v2_A add copyb char(8);

begin transaction
update v2_A set copyb=substring(b,1,8);

alter table v2_A drop column b;
alter table v2_A add b char(8);

update v2_A set b=copyb;
commit;

alter table v2_A drop column copyb;
说明:我想在table v2_A中做这样的操作,因为某种需要我要把A表的b字段做substring操作赋值给一个临时字段copyb,
然后删除b字段,再新建一个同名的字段,把临时字段的值再赋回来,再将临时字段删除。
请别讨论为什么这么做,现在碰到的问题是,每一步单独执行都可以,但是一起执行的时候就报copyb无效,其实只能按上面
那样五个步骤分着走,不然就报错,这是为什么???

------解决方案--------------------
你给这五步放到批处理中,不要放到事务里面试试
------解决方案--------------------
SQL code

--GO代表一个批处理的结束
--alter table在SQL语句中之后需加go,而在存储过程就不用

alter table v2_A add copyb char(8)
go
update v2_A set copyb=substring(b,1,8)
alter table v2_A drop column b
alter table v2_A add b char(8)
go
update v2_A set b=copyb