Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

L'exécution de la requête sp_executesql attend le paramètre @statement

La procédure stockée "sp_executesql" attend l'exécution d'un seul paramètre de chaîne @statement.

Votre chaîne est totalement détraquée ici ..... vous devez préfixer toutes les parties de chaîne "fixes" avec un N'......' pour en faire des chaînes Unicode, mais ce n'est certainement pas le cas ici.

Je pense que vous voudrez peut-être essayer ceci :

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

Cela fonctionne-t-il et fait-il ce que vous attendez ? ?

Explication :le N'.........' délimite la chaîne entière qui contient l'instruction SQL. Toute apostrophe à l'intérieur qui doit être dupliquée ("échappée"). J'espère avoir bien compris votre logique.

Marc