Uważam, że przed wykonaniem instrukcji SQL należy połączyć ze sobą całość:
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)
O ile pamiętam, nie można mieć wyrażeń i obliczeń wewnątrz EXEC
polecenie - przygotuj wcześniej przygotowaną instrukcję, a następnie ją wykonaj
Ponadto nie jestem do końca pewien, co zawierają te twoje zmienne - @DocID1
i @DocID2
- chcesz ustawić ich wartość, czy przechowują nazwę innej zmiennej do ustawienia??
Aktualizacja: jeśli rzeczywiście chcesz ustawić wartości @DocID1
i @DocID2
, to zapytanie było błędne na początku - potrzebujesz czegoś takiego:
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)
ale te dwie zmienne są objęte zakresem wewnątrz dynamicznie wykonywany kod SQL i nie jest dostępny „na zewnątrz” skryptu.