sql >> Databasteknik >  >> RDS >> Sqlserver

Dynamisk MS SQL-variabel Parsning felaktig

  1. Använd korrekta typer SYSNAME för identifierare, NVARCHAR(MAX) för fråga
  2. Använd REPLACE istället för att sammanfoga blir det mycket enklare att felsöka, särskilt när du behöver bokstavssträngar
  3. Överväg att använda QUOTENAME funktion

Kod:

DECLARE 
    @tableName  SYSNAME,
    @columnName SYSNAME,
    @prompt     VARCHAR(20),
    @dynSQL     NVARCHAR(MAX);

SET @tableName  = QUOTENAME('A1-ExciseESN');
SET @columnName = QUOTENAME('Anode Excise ESN (A1)');

SET @dynSQL = 
N'INSERT INTO  <tableName> 
 ([trav num], <columnName>)
Select [trav num], <columnName>
FROM [temprmi$] t1
PIVOT(min([Lvl1 Trace Data])
FOR [Prompt Text] IN (<columnName>)
   ) AS PVTTable
     where <columnName> is not null 
        and [trav num] not in (select [trav num] from <tableName> )'

SET @dynSQL = REPLACE(REPLACE(@dynSQL, '<tableName>', @tableName),
               '<columnName>', @columnName);

PRINT @dynSQL;

LiveDemo

Utdata:

INSERT INTO  [A1-ExciseESN] 
 ([trav num], [Anode Excise ESN (A1)])
Select [trav num], [Anode Excise ESN (A1)]
FROM [temprmi$] t1
PIVOT(min([Lvl1 Trace Data])
FOR [Prompt Text] IN ([Anode Excise ESN (A1)])
   ) AS PVTTable
     where [Anode Excise ESN (A1)] is not null 
       and [trav num] not in (select [trav num] from [A1-ExciseESN] )


  1. MySQL INSERT med lookup när null

  2. Orsakas av:java.sql.SQLE Undantag:ORA-01795:maximalt antal uttryck i en lista är 1000?

  3. Import av 8GB mysql dump tar lång tid

  4. Ta bort rader:Ingen enskild medlem har fler än x poster