Non è possibile utilizzare variabili, come @tableName, in DDL. Inoltre, dividere il nome in una parte e ignorare lo schema può solo causare bug. Dovresti semplicemente usare la sostituzione ''?'' nel parametro batch SQL e fare affidamento su MSforeachtable
sostituzione:
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';