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