Vous ne pouvez pas utiliser de variables, comme @tableName, dans DDL. De plus, diviser le nom en plusieurs parties et ignorer le schéma ne peut qu'entraîner des bogues. Vous devez simplement utiliser le remplacement ''?'' dans le paramètre batch SQL et compter sur le MSforeachtable
remplacement :
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';