I cannot reproduce the error.
Perhaps I’m not understanding the problem.
The following works fine for me in SQL Server 2005, with the extra “foo” column appearing in the second select result:
IF OBJECT_ID(‘tempdb..#Results’) IS NOT NULL DROP TABLE #Results
GO
CREATE TABLE #Results ( Company CHAR(3), StepId TINYINT, FieldId TINYINT )
GO
select company, stepid, fieldid from #Results
GO
ALTER TABLE #Results ADD foo VARCHAR(50) NULL
GO
select company, stepid, fieldid, foo from #Results
GO
IF OBJECT_ID(‘tempdb..#Results’) IS NOT NULL DROP TABLE #Results
GO
The statement should be of the order
Alter statement for the table
GO
Select statement.
Without ‘GO’ in between, the whole thing will be considered as one single script and when the select statement looks for the column,it won’t be found.
With ‘GO’ , it will consider the part of the script up to ‘GO’ as one single batch and will execute before getting into the query after ‘GO’.