Съхранената процедура "sp_executesql" очаква да се изпълни един параметър на низ @statement.
Вашият низ е напълно развален тук..... трябва да префиксирате всички "фиксирани" части от низ с N'......', за да ги направите Unicode низове, но това определено не е правилно случаят тук.
Мисля, че може да искате да опитате това:
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
Работи ли това и прави ли това, което очаквате да прави??
Обяснение:N'.........' ограничава целия низ, който съдържа SQL оператора. Всеки апостроф вътре, който трябва да бъде дублиран ("избегнат"). Надявам се, че съм разбрал правилно логиката ви.
Марк