Proc tersimpan "sp_executesql" mengharapkan parameter string tunggal @statement untuk dieksekusi.
String Anda benar-benar rusak di sini ..... Anda perlu mengawali setiap bagian string "tetap" dengan N'......' untuk menjadikannya string Unicode, tetapi ini jelas tidak benar terjadi di sini.
Saya rasa Anda mungkin ingin mencoba ini:
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
Apakah ini berhasil dan melakukan apa yang Anda harapkan??
Penjelasan:N'.........' membatasi seluruh string yang berisi pernyataan SQL. Setiap tanda kutip di dalam yang harus diduplikasi ("lolos"). Saya harap saya memahami logika Anda dengan benar.
Marc