Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server:Nachricht 102, Ebene 15, Status 1, Zeile 2 Falsche Syntax in der Nähe von „=“

Ich glaube, Sie müssen Ihre SQL-Anweisung als Ganzes verketten, bevor Sie sie ausführen:

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)

Soweit ich mich erinnere, können Sie keine Ausdrücke und Berechnungen innerhalb des EXEC haben Befehl - Holen Sie sich die vorher vorbereitete Anweisung und führen Sie sie dann aus

Außerdem bin ich mir nicht ganz sicher, was diese Variablen von Ihnen enthalten - @DocID1 und @DocID2 - möchten Sie ihren Wert setzen, oder enthalten sie den Namen einer anderen Variablen, die gesetzt werden soll??

Aktualisierung: wenn Sie eigentlich die Werte von @DocID1 setzen wollten und @DocID2 , dann war Ihre Abfrage von vornherein falsch - dann brauchen Sie so etwas:

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)

aber dann sind diese beiden Variablen innerhalb das dynamisch ausgeführte SQL und stehen "außerhalb" Ihres Skripts nicht zur Verfügung.