As I have mentioned above my solution is to wrap the script around SET PARSEONLY OFF/ON. And here is the implementation:
SET PARSEONLY OFF -- turn off the syntax and name reference check
IF (EXISTS (
SELECT *
FROM sys.columns c
WHERE c.object_id = OBJECT_ID(N'[dbo].CS')
AND c.[Name] = 'NotEligible'
)
AND EXISTS (
SELECT *
FROM sys.columns c
WHERE c.object_id = OBJECT_ID(N'[dbo].CS')
AND c.[Name] = 'DerivedNotEligible'
))
BEGIN
UPDATE dbo.CS
SET dbo.CS.DerivedNotEligible = dbo.CS.NotEligible
ALTER TABLE [dbo].[CS]
DROP CONSTRAINT [DF_CS_NotEligible]
ALTER TABLE [dbo].CS
DROP COLUMN [NotEligible]
END
GO
SET PARSEONLY ON -- turn on the syntax and name reference check