IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MyTable' AND COLUMN_NAME = 'FirstName') BEGIN SET @Command = N'ALTER TABLE [MyTable] ADD [FirstName] char(25) DEFAULT '''' WITH VALUES' EXEC sp_executesql @Command END ELSE BEGIN SET @Command = N'ALTER TABLE [MyTable] ADD [FirstName-Temporary] char(25)' EXEC sp_executesql @Command SET @Command = N'UPDATE [MyTable] SET [FirstName-Temporary]=FirstName' EXEC sp_executesql @Command SET @Command = N'ALTER TABLE [MyTable] DROP COLUMN [FirstName]' EXEC sp_executesql @Command EXEC sp_RENAME 'MyTable.FirstName-Temporary', 'FirstName' , 'COLUMN' ENDThis never fails when the field does not exist. But, when it exists, I am using the alternative route in order to avoid a timeout. On some isolated situations, when the table is big, this is when I have a problem.