sql >> Base de Datos >  >> RDS >> Sqlserver

La ejecución de la consulta sp_executesql espera el parámetro @statement

El proceso almacenado "sp_executesql" espera que se ejecute un único parámetro de cadena @statement.

Su cadena está totalmente fuera de control aquí... necesita prefijar cualquier parte de cadena "fija" con una N'......' para convertirlas en cadenas Unicode, pero este definitivamente no es el caso aquí.

Creo que te gustaría probar esto:

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

¿Funciona esto y hace lo que esperas que haga?

Explicación:la N'.........' delimita la cadena completa que contiene la instrucción SQL. Cualquier apóstrofe dentro que tenga que ser duplicado ("escapado"). Espero haber entendido tu lógica correctamente.

Marc