Exceptions should be "exceptional", as in the exception to the rule.
Do you plan on running this code, and 90% of the time, the column exists?
Then that is not "exceptional".
Do not use exception catching as normal logic flow.
Here are some more pointers by someone smarter than me:
http://blogs.msdn.com/b/kcwalina/archive/2005/03/16/396787.aspx
"Do not use exceptions for normal flow of control. "
Here is my typical idempotent add column tsql.
IF EXISTS ( SELECT TABLE_SCHEMA , TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Categories' and TABLE_SCHEMA = 'dbo' )
BEGIN
IF NOT EXISTS
(
SELECT *
FROM [INFORMATION_SCHEMA].[COLUMNS]
WHERE
TABLE_NAME = 'Categories'
AND TABLE_SCHEMA = 'dbo'
AND COLUMN_NAME = 'CategoryName'
)
BEGIN
print 'Adding the column dbo.Categories.*CategoryName*'
ALTER TABLE [dbo].[Categories] ADD [CategoryName] nvarchar(15) NOT NULL
END
ELSE
BEGIN
print 'The column dbo.Categories.*CategoryName* already exists.'
END
END