sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server:Msg 102, Level 15, State 1, Line 2 Forkert syntaks nær '='

Jeg tror, ​​du skal sammenkæde din SQL-sætning som en helhed, før du udfører den:

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)

Så vidt jeg husker, kan du ikke have udtryk og beregninger inde i EXEC kommando - få klargjort sætningen på forhånd, og udfør den derefter

Desuden er jeg ikke helt sikker på, hvad dine variabler indeholder - @DocID1 og @DocID2 - vil du indstille deres værdi, eller har de navnet på en anden variabel, der skal indstilles?

Opdatering: hvis du faktisk ønskede at indstille værdierne for @DocID1 og @DocID2 , så var din forespørgsel forkert til at begynde med - så har du brug for noget som dette:

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)

men så er disse to variabler scoped indenfor den dynamisk udførte SQL og er ikke tilgængelige for "ydersiden" af dit script.



  1. Hvordan læser man PostgreSQL wal-fildata? Er der en kommando til at konvertere PostgreSQL binær til læsbart tekstformat?

  2. Hvordan kan jeg se alle fremmednøgler til en tabel eller kolonne?

  3. mysql vælg KUN dublerede poster fra databasen

  4. At få SQL-lagret procedure resulterer i data.frame-format ved hjælp af RODBC