Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Beim Ausführen der sp_executesql-Abfrage wird der Parameter @statement erwartet

Die gespeicherte Prozedur „sp_executesql“ erwartet, dass ein einzelner String-Parameter @statement ausgeführt wird.

Ihre Zeichenfolge ist hier völlig aus dem Ruder ..... Sie müssen allen "festen" Zeichenfolgenteilen ein N'......' voranstellen, um sie zu Unicode-Zeichenfolgen zu machen, aber dies ist hier definitiv nicht richtig der Fall.

Ich denke, Sie sollten Folgendes versuchen:

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

Funktioniert das und macht es das, was Sie erwarten??

Erläuterung:Das N'.........' begrenzt die gesamte Zeichenfolge, die die SQL-Anweisung enthält. Jeder darin enthaltene Apostroph muss dupliziert werden ("escaped"). Ich hoffe, ich habe Ihre Logik richtig verstanden.

Markus