Proc được lưu trữ "sp_executesql" yêu cầu một tham số chuỗi duy nhất @statement thực thi.
Chuỗi của bạn hoàn toàn không ổn ở đây ..... bạn cần phải thêm tiền tố bất kỳ phần chuỗi "cố định" nào bằng N '......' để tạo thành chuỗi Unicode, nhưng điều này chắc chắn không đúng trường hợp ở đây.
Tôi nghĩ bạn có thể muốn thử điều này:
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
Điều này có hoạt động không và làm những gì bạn mong đợi nó làm ??
Giải thích:N '.........' phân định toàn bộ chuỗi chứa câu lệnh SQL. Bất kỳ dấu nháy đơn nào bên trong phải được sao chép ("thoát"). Tôi hy vọng tôi đã hiểu đúng logic của bạn.
Marc