Is there any way to supress the result sets that a stored proc returns?

1. I have a stored procedure which returns a result set from a local table, however, also in that code I need to execute a dynamic SQL statement. The procedure returns all the result sets. Is there any way to make it return only the last one? (the procedure code is below)

2. Another question: is there any way to execute a sql statement not using EXEC or sp_executesql that is "dynamic" in the sense that it selects columns and tables that are stored in variables?

e.g. can I do this?

DECLARE @Value
SELECT @Value = @ColumnName FROM @TableName WHERE Id = @Id

If I can somehow eliminate the dynamic sql statement from the procedure mentioned in 1, then the problem would be solved. Is there another way to fetch a value from a column from some table, where the column and table are strings stored in some local variables?


Thanks,
Alex.

Code:
CREATE PROCEDURE proc1
	@Id int
AS
BEGIN

DECLARE @resultSet TABLE (ReportSection varchar(32), Field varchar(32), QuestionNum int,
	Question varchar(1024), Value varchar(1024));

-- temp table to taverse through the report sections
DECLARE @sectionsTable TABLE (DisplayOrder int, ReportSection varchar(32));
... some inserts into @sectionsTable ...

DECLARE Sections_Cursor CURSOR FOR
	SELECT ReportSection FROM @sectionsTable ORDER BY DisplayOrder;
DECLARE @Section varchar(32), @RowCounter int;
SET @RowCounter = 1;

OPEN Sections_Cursor

FETCH NEXT FROM Sections_Cursor
INTO @Section

WHILE @@FETCH_STATUS = 0 -- foreach report section
BEGIN
	-- all fields within a report section
	DECLARE FieldsInSection_Cursor CURSOR FOR
		SELECT field, tableName, question FROM dbmap
		WHERE LOWER(dailyreportsection) = LOWER(@Section)
		ORDER BY field;
	DECLARE @ColumnName varchar(32);
	DECLARE @TableName varchar(32);
	DECLARE @Question varchar(255)
	DECLARE @Value varchar(1024);

	OPEN FieldsInSection_Cursor;

	FETCH NEXT FROM FieldsInSection_Cursor
	INTO @ColumnName, @TableName, @Question;

	WHILE @@FETCH_STATUS = 0 -- foreach (column in a report section)
	BEGIN
		EXEC ('SELECT ' + @ColumnName + ' FROM ' + @TableName + ' WHERE Id = ' + @Id);

		INSERT INTO @resultSet (ReportSection, Field, QuestionNum, Question, Value)
		VALUES (@Section, @ColumnName, @RowCounter, @Question, @Value)

		FETCH NEXT FROM FieldsInSection_Cursor
		INTO @ColumnName, @TableName, @Question;

		SET @RowCounter = @RowCounter + 1;
	END

	CLOSE FieldsInSection_Cursor
	DEALLOCATE FieldsInSection_Cursor

	FETCH NEXT FROM Sections_Cursor
	INTO @Section
END

CLOSE Sections_Cursor
DEALLOCATE Sections_Cursor

SELECT ReportSection, Field, QuestionNum, Question, Value FROM @resultSet;
END