Creo que debe concatenar su declaración SQL como un todo, antes de ejecutarla:
DECLARE
@TableA nvarchar(255)='TableA',
@DOCID1 nvarchar(MAX),
@SqlStmt NVARCHAR(500),
@DOCID2 int;
SET @SqlStmt = N'SELECT TOP (1) ' + @DOCID1 + N' = DOCID1, ' + @DOCID2 + N' = DOCID2 FROM [' + @TABLEA + N'] ORDER BY DOCID2';
EXEC (@SqlStmt)
Por lo que recuerdo, no puede tener expresiones y cálculos dentro del EXEC
comando:obtenga la declaración preparada de antemano, luego ejecútela
Además, no estoy del todo seguro de qué contienen esas variables tuyas:@DocID1
y @DocID2
- ¿Desea establecer su valor o tienen el nombre de otra variable para establecer?
Actualización: si realmente desea establecer los valores de @DocID1
y @DocID2
, entonces su consulta fue incorrecta al principio, entonces necesita algo como esto:
DECLARE
@TableA nvarchar(255) = 'TableA',
@SqlStmt NVARCHAR(500);
SET @SqlStmt =
N'DECLARE @DocID1 NVARCHAR(MAX), @DocID2 INT; ' +
N'SELECT TOP (1) @DOCID1 = DOCID1, @DOCID2 = DOCID2 FROM [' + @TABLEA + N'] ORDER BY DOCID2';
EXEC (@SqlStmt)
pero entonces, esas dos variables están en el ámbito dentro el SQL ejecutado dinámicamente y no están disponibles para el "exterior" de su secuencia de comandos.