There has to be more to it than what you've shown above. I can't get a very similar script to fail; the following works just great:
CREATE TABLE #House (housekey int, number int, street char(20))
insert into #House (housekey, number, street) values (1, 123, 'Wilson Ave')
insert into #House (housekey, number, street) values (2, 124, 'Wilson Ave')
insert into #House (housekey, number, street) values (3, 125, 'Wilson Ave')
alter table #House DROP COLUMN street
alter table #House ADD street varchar(20)
update #House
set street = case
when number = 123 then 'Wilson Ave'
when number = 124 then 'Willson Ave'
when number = 125 then 'Wulson Ave'
else 'Xxy St'
end
select * from #house
drop table #house
I thought the idea of breaking up the script by putting "GO" after certain parts would be effective, but when I come to run the thing I can't get it to fail.
In other words, "It works on my machine." Is there anything you've left off that might make a difference?
EDIT TO ADD: Yes, the GO is the Answer. "It works on my machine" is a bit irresponsible here, I admit, because the question didn't deal with a temporary table -- but a regular one. I tried out the problem using a permanent table and got the same result as the questioner, and the GO fixed it. That seemed logical from the get-go, actually.