Thank you, that looks like something I can try doing.
One question: why do I have to use dynamic sql? Why can't I just:
-- Use a temp table to store results
CREATE TABLE #Results (col_1 varchar(1), col_2 int);
-- Use try catch blocks for each source table and dynamic sql
BEGIN TRY
INSERT INTO #Results
SELECT col_1, col_2 FROM A;
END TRY
BEGIN CATCH
PRINT 'Table A Does Not Exist';
END CATCH;
BEGIN TRY
INSERT INTO #Results
SELECT col_1, col_2 FROM B;
END TRY
BEGIN CATCH
PRINT 'Table B Does Not Exist';
END CATCH;
BEGIN TRY
INSERT INTO #Results
SELECT col_1, col_2 FROM C;
END TRY
BEGIN CATCH
PRINT 'Table C Does Not Exist';
END CATCH;