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.