For looping you either have to use cursors or while exists construct, where you remove entry from temporary table each time you process it.
As for passing table name to query, there is no way to do that without creating dynamic SQL query. You do that by creating query in string with concatenating table name into the right place. Use QUOTENAME function to perform quoting of name if there are any spaces or weird characters.
Example with cursor:
DECLARE @tables TABLE (
Name SYSNAME
);
DECLARE @tableName SYSNAME;
DECLARE @sql NVARCHAR(4000);
INSERT INTO @tables
SELECT i.table_name
FROM INFORMATION_SCHEMA.COLUMNS i
WHERE i.column_name = 'fieldA';
DECLARE cur CURSOR LOCAL FAST_FORWARD
FOR
SELECT Name
FROM @tables;
OPEN cur;
FETCH NEXT FROM cur
INTO @tableName;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = N'ALTER TABLE ' + QUOTENAME(@tableName) + N' ADD new_col varchar(8);';
SET @sql = @sql + N'UPDATE ' + QUOTENAME(@tableName) + N' SET new_col = old_col;';
EXEC sp_executesql @sql;
FETCH NEXT FROM cur
INTO @tableName;
END
CLOSE cur;
DEALLOCATE cur;