Cursorfetch: The number of variables declared in the INTO list must match that of selected columns

looknow12
looknow12 used Ask the Experts™
on
I'm receiving the error Cursorfetch: The number of variables declared in the INTO list must match that of selected columns when it appears this stored procedure tries to go to the next record.

I've noted where the problem is occurring.

Thank you,
alter PROCEDURE [dbo].[SendMyMails]
AS
BEGIN
 SET NOCOUNT ON;

DECLARE @recipients varchar(20),
   @subject varchar(50),
   @body varchar(1000),
   @custid varchar (8), 
   @firstname varchar (100), 
   @lastname varchar(100), 
   @ccexpdate varchar(8), 
   @bmonthlyactive varchar(1), 
   @dtmonthlynextpay varchar (50),
   @dtmonthlypaid varchar (50), 
   @iemailoptin varchar (8), 
   @recipientemail varchar (80), 
   @sbarcode varchar (50), 
   @monthlyaccountid varchar (50), 
   @monthlyaccountdescription  varchar (250),
   @monthlyamount varchar(12),
   @bodyformat varchar(12)
   
DECLARE Mail_Cursor CURSOR FOR
select C.lcustomerid, c.sFirstName,c.sLastName,c.sCCExpDate,c.bMonthlyActive,c.dtMonthlyNextPay,c.dtMonthlyPaid,c.iEmailOptIn,c.sEmail,c.sBarcode,c.lMonthlyAccountTypeId,v.sDescription,v.dblAmount
		from Custtable as c
		join AccountTypes as v on v.laccounttype = c.lMonthlyAccountTypeId
		
		where bMonthlyActive = 1 and dtMonthlyPaid < Convert(datetime, Convert(int, GetDate())) and iEmailOptIn = '1'		
		

OPEN Mail_Cursor;
FETCH NEXT FROM Mail_Cursor
 INTO @custid, @firstname, @lastname, @ccexpdate, @bmonthlyactive, @dtmonthlynextpay, @dtmonthlypaid, @iemailoptin, @recipientemail, @sbarcode, @monthlyaccountid, @monthlyaccountdescription,@monthlyamount ;

declare @tmp_subject varchar(1000)
declare @tmp_body varchar(1000)

WHILE @@FETCH_STATUS = 0
   BEGIN
	
	set @tmp_subject = 'Your '+@monthlyaccountdescription+' Program at the Acme Company'
	set @tmp_body = '<p>Dear '+@firstname+' '+@lastname+',</p></p>
				   <p>Your credit card ending with an expiration date of '+SUBSTRING(ltrim(rtrim(@ccexpdate)),1,2)+'/'+SUBSTRING(ltrim(rtrim(@ccexpdate)),3,2)+' has been charged in the amount of $'+@monthlyamount+' for the '+@monthlyaccountdescription+'.</p>
				   <p>Thank you for your business.</p>'
    --Sending Mail
    EXEC msdb.dbo.sp_send_dbmail @recipients = @recipientemail,
          @subject = @tmp_subject,
          @body = @tmp_body,
          @body_format = 'HTML';
             
      FETCH NEXT FROM Mail_Cursor
Problem here --->>      INTO @recipients, @subject, @body ;
   END;
   
CLOSE Mail_Cursor;
DEALLOCATE Mail_Cursor;
END

Open in new window

Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Change this line
Problem here --->>      INTO @recipients, @subject, @body ; 

Open in new window

For this one
INTO @custid, @firstname, @lastname, @ccexpdate, @bmonthlyactive, @dtmonthlynextpay, @dtmonthlypaid, @iemailoptin, @recipientemail, @sbarcode, @monthlyaccountid, @monthlyaccountdescription,@monthlyamount ; 

Open in new window

You need to have the same fetch statement right before the END in the Cursor


FETCH NEXT FROM Mail_Cursor
 INTO @custid, @firstname, @lastname, @ccexpdate, @bmonthlyactive, @dtmonthlynextpay, @dtmonthlypaid, @iemailoptin, @recipientemail, @sbarcode, @monthlyaccountid, @monthlyaccountdescription,@monthlyamount ;

<<Where you mentioned "Problem here --->>" >>

Thanks,

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial