Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server:Msg 102, Level 15, State 1, Line 2 Sintaxe incorreta perto de '='


Acredito que você tenha que concatenar sua instrução SQL como um todo, antes de executá-la:
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)

Tanto quanto me lembro, você não pode ter expressões e cálculos dentro do EXEC command - prepare a instrução com antecedência e execute-a

Além disso, não tenho certeza do que essas suas variáveis ​​contêm - @DocID1 e @DocID2 - você deseja definir o valor deles ou eles mantêm o nome de outra variável para definir?

Atualização: se você realmente quiser definir os valores de @DocID1 e @DocID2 , então sua consulta estava errada para começar - então você precisa de algo assim:
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)

mas então, essas duas variáveis ​​têm escopo dentro o SQL executado dinamicamente e não estão disponíveis para o "fora" do seu script.