Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

A execução da consulta sp_executesql espera o parâmetro @statement


O proc armazenado "sp_executesql" espera que um único parâmetro de string @statement seja executado.

Sua string está totalmente fora de controle aqui..... você precisa prefixar qualquer parte de string "fixa" com um N'......' para torná-las strings Unicode, mas isso definitivamente não é o caso aqui.

Acho que você pode tentar isso:
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

Isso funciona e faz o que você espera que faça??

Explicação:o N'.........' delimita toda a string que contém a instrução SQL. Qualquer apóstrofo dentro que tenha que ser duplicado ("escapado"). Espero ter entendido sua lógica corretamente.

Marco