Tôi tin rằng bạn phải nối toàn bộ câu lệnh SQL của mình lại với nhau trước khi thực thi nó:
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)
Theo như tôi nhớ lại, bạn không thể có các biểu thức và tính toán bên trong EXEC
lệnh - chuẩn bị câu lệnh trước, sau đó thực thi nó
Ngoài ra, tôi không hoàn toàn chắc chắn những biến đó của bạn nắm giữ những gì - @DocID1
và @DocID2
- bạn có muốn đặt giá trị của chúng không, hay chúng giữ tên của một biến khác để đặt ??
Cập nhật: nếu bạn thực sự muốn đặt các giá trị của @DocID1
và @DocID2
, khi đó truy vấn của bạn đã sai khi bắt đầu - khi đó bạn cần một cái gì đó như sau:
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)
nhưng sau đó, hai biến đó nằm trong phạm vi bên trong SQL được thực thi động và không có sẵn cho "bên ngoài" tập lệnh của bạn.