Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Server:Msg 102, Mức 15, Trạng thái 1, Dòng 2 Cú pháp không chính xác gần '='

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@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@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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để SQL Server xác định thứ tự của các cột khi bạn thực hiện lệnh `SELECT *`?

  2. Làm thế nào để đính kèm MDF mà không có tệp nhật ký?

  3. Đây là ba lý do tại sao bạn có thể thấy hoạt động cao điểm trong phiên bản SQL của bạn

  4. Các kiểu liệt kê trong SQL Server 2008?

  5. Cách chuyển đổi từ định dạng ngày này sang định dạng ngày khác trong SQL Server bằng CONVERT ()