Você não pode usar variáveis, como @tableName, em DDL. Além disso, dividir o nome em partes e ignorar o esquema só pode resultar em bugs. Você deve apenas usar a substituição ''?'' no parâmetro de lote SQL e confiar no
MSforeachtable
substituição:EXEC sp_MSforeachtable '
if not exists (select * from sys.columns
where object_id = object_id(''?'')
and name = ''CreatedOn'')
begin
ALTER TABLE ? ADD CreatedOn datetime NOT NULL DEFAULT getdate();
end';