Utilizando sp_executesql com params reclama da necessidade de declarar uma variável

Estou tentando criar um procedimento armazenado que use sp_executesql. Eu olhei longo e duroAqu, mas não consigo ver o que estou fazendo incorretamente no meu código. Eu sou novo em procedimentos armazenados / funções de servidor sql em geral, então acho que estou perdendo algo simples. O procedimento armazenado alter acontece bem, mas quando tento executá-lo, estou recebendo um err

O erro diz.

Msg 1087, Level 15, State 2, Line 3
Must declare the table variable "@atableName"

O procedimento é assim.

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE [dbo].[sp_TEST]
    @tableName varchar(50),
    @tableIDField varchar(50),
    @tableValueField varchar(50)
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @SQLString nvarchar(500);
    SET @SQLString = N'SELECT DISTINCT @aTableIDField FROM @atableName';
    EXEC sp_executesql @SQLString,
            N'@atableName varchar(50),
              @atableIDField varchar(50),
              @atableValueField varchar(50)',
            @atableName = @tableName,
            @atableIDField = @tableIDField,
            @atableValueField = @tableValueField;
END

E eu estou tentando chamá-lo com algo assim.

EXECUTE sp_TEST 'PERSON', 'PERSON.ID', 'PERSON.VALUE'

Este exemplo não está adicionando nada de especial, mas eu tenho um grande número de visualizações com código semelhante. Se eu conseguisse que esse procedimento armazenado funcionasse, poderia diminuir bastante o código repetid

Obrigado pela ajuda

Editar Estou tentando fazer isso para facilitar a manutenção. Eu tenho várias visualizações que basicamente têm o mesmo sql exato, exceto que o nome da tabela é diferente. Os dados são trazidos para a instância do servidor SQL para fins de relatório. Quando tenho uma tabela contendo várias linhas por ID de pessoa, cada uma contendo um valor, geralmente preciso delas em uma única célula para os usuário

questionAnswers(3)

yourAnswerToTheQuestion