Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

L'esecuzione della query sp_executesql prevede il parametro @statement

Il processo memorizzato "sp_executesql" prevede l'esecuzione di un singolo parametro stringa @statement.

La tua stringa è completamente fuori controllo qui..... devi anteporre a qualsiasi parte di stringa "fissa" una N'......' per renderle stringhe Unicode, ma questo non è assolutamente il caso qui.

Penso che potresti provare questo:

DECLARE @a INT 
DECLARE @b VARCHAR(2)

SET @a = 1

DECLARE @statement NVARCHAR(500)

WHILE @a < 30
BEGIN
    SET @b = CAST(@a AS VARCHAR(2))

    SET @statement = 
        N'update source_temp set pmt_90_day = pmt_90_day + ' + 
             'convert(money, ''trans_total_' + @b + ''') ' + 
             'where convert(datetime, ''effective_date_' + @b + ''')' +
             ' <= DATEADD(DAY, 90, ORSA_CHARGE_OFF_DATE) ' +
             'and DRC_FLAG_' + @b + ' = ''C'''

    exec sp_executesql @statement

    SET @a = @a + 1
END

Funziona e fai quello che ti aspetti che faccia??

Spiegazione:la N'.........' delimita l'intera stringa che contiene l'istruzione SQL. Qualsiasi apostrofo all'interno che deve essere duplicato ("scappato"). Spero di aver capito bene la tua logica.

Marco