sql >> Databáze >  >> RDS >> Sqlserver

SQL Server:Zpráva 102, úroveň 15, stav 1, řádek 2 Nesprávná syntaxe poblíž '='

Domnívám se, že před jeho provedením musíte zřetězit svůj příkaz SQL jako celek:

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)

Pokud si vzpomínám, nemůžete mít výrazy a výpočty uvnitř EXEC příkaz - připravte příkaz předem a poté jej proveďte

Také si nejsem úplně jistý, co ty vaše proměnné obsahují - @DocID1 a @DocID2 - chcete nastavit jejich hodnotu, nebo obsahují název jiné proměnné k nastavení??

Aktualizace: pokud jste skutečně chtěli nastavit hodnoty @DocID1 a @DocID2 , pak byl váš dotaz zpočátku nesprávný - pak potřebujete něco takového:

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 pak jsou tyto dvě proměnné vymezeny uvnitř dynamicky spouštěné SQL a nejsou dostupné „vně“ vašeho skriptu.



  1. SQL Server CTE a příklad rekurze

  2. Jak spouštět aplikace PHP 5 s MySQL 8.0 na CentOS 7

  3. LINQ to Entities nerozpoznává metodu 'System.String ToString()' a tuto metodu nelze přeložit do výrazu store.

  4. Vytvoření databáze PostgreSQL