Jag tror att du måste sammanfoga din SQL-sats som helhet innan du kör 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åvitt jag minns kan du inte ha uttryck och beräkningar i EXEC
kommando - förbered satsen i förväg och kör den sedan
Dessutom är jag inte helt säker på vad dessa variabler innehåller - @DocID1
och @DocID2
- vill du ställa in deras värde, eller har de namnet på en annan variabel som ska ställas in?
Uppdatering: om du faktiskt ville ställa in värdena för @DocID1
och @DocID2
, då var din fråga fel till att börja med - då behöver du något sånt här:
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 sedan är dessa två variabler omfångade inuti den dynamiskt körda SQL-koden och är inte tillgängliga för "utsidan" av ditt skript.