"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 ステートメントを含むストリング全体を区切ります。複製 (「エスケープ」) する必要がある内部のアポストロフィ。あなたの論理を正しく理解できたと思います.
マーク