Du kan inte använda variabler, som @tabellnamn, i DDL. Dessutom kan en splittring av namnet och ignorera schemat bara resultera i buggar. Du bör bara använda ersättningen ''?'' i SQL batch-parametern och lita på MSforeachtable
ersättning:
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';