sql >> データベース >  >> RDS >> Sqlserver

動的 MS SQL 変数の解析が正しくない

    <オール>
  1. 正しいタイプ SYSNAME を使用してください 識別子の場合、NVARCHAR(MAX) クエリ用
  2. REPLACE を使用する 連結する代わりに、特に文字列リテラルが必要な場合にデバッグがはるかに簡単になります
  3. QUOTENAME の使用を検討してください 関数
  4. コード:

    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

    出力:

    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. OracleデータベースにJdbcTemplateを使用してタイムスタンプを挿入します(ORA-01858)

    2. PHP-SQL:ジャンクテキストとして表示されるアップロードされた画像

    3. C ++を使用してwxImageをデータベースに保存する方法は?

    4. DBAWSシークレットをtomcatcontext.xmlに渡す方法は?