Solved

SQL Server 2000 Cursor Issue with Variable Values adding concatenated text

Posted on 2010-08-30
9
405 Views
Last Modified: 2012-05-10
Scenario:
I have a stored procedure that I need to loop through records in a log table and send out email messages to users.   I am using a CURSOR to loop through each record in the table and getting 2 field values that I am trying to concatenate a variable declare within the stored procedure.

I am using a SET statement Like this  SET @Body = @Body + 'Table Name: ' + @TableName  See full code below.

The problem is when I use this method in the CURSOR the final results  come out blank.  I am using the PRINT function to view the results.   If I just use SET @Body = 'Table Name:' + @TableName and PRINT out each line, it works fine.  Don't Understand why using the @Body = @Body + "Additional Text'  does not work, I use this type on Concatenation all the time, not sure why it does not work within the cursor.   Here is my code:

ALTER PROCEDURE [dbo].[spEmailControlTableChange]
      -- Add the parameters for the stored procedure here


AS
DECLARE @Comments varchar(500)
DECLARe @TableName varchar(75)
DECLARE @emailFrom varchar(75)
DECLARE @EmailTo varchar(500)
DECLARE @Subject varchar(255)
DECLARE @Body varchar(8000)
DECLARE @BodyLine varchar(8000)
DECLARE @RecCount int
DECLARE @TotalCount int

/********** Get Total Count of all Records that Have Been Updated*/
SET @TotalCount = (Select Count(recID) as RecCount from dbo.LVRG_CTRL_ControlTableChangeLog WHERE UpdateFlag = 1)

SET @RecCount = 1
SET @emailFrom = 'ABMTools@Hp.com'
SET @emailTo = 'jesse.holmes@hp.com'
--SET @emailTo = 'jesse.holmes@hp.com, Pramod.bohra@hp.com, Rachael.Mclarty@hp.com, Angel.Garza@hp.com'
SET @subject = 'SLA Control Table Change Notification - Change occured on the Folowing Table(s): '
SET @Body = 'The Following Tables Have been Changed' + CHAR(13)
SET @Body = @Body + '===================================================='

      -- SET NOCOUNT ON added to prevent extra result sets from
      -- interfering with SELECT statements.
      SET NOCOUNT ON;



DECLARE @TableCursor CURSOR

SET @TableCursor = CURSOR -- FAST_FORWARD
FOR
Select TableName, Comments
From dbo.LVRG_CTRL_ControlTableChangeLog
WHERE UpdateFlag = 1

OPEN @TableCursor
FETCH NEXT FROM @TableCursor
INTO @TableName,@Comments

WHILE @@FETCH_STATUS = 0
BEGIN

--******* Add a new Line to Body Text *************
SET @Body = @Body + 'Table Name: ' + @TableName + ' - Change Desc: ' + @Comments + CHAR(13)
PRINT @RecCount
PRINT @Body

--******* Increment Record Count **********
SET @RecCount = @RecCount + 1


IF @RecCount > @TotalCount
BEGIN      
      PRINT 'Final Body: = ' + @Body
      PRINT 'DONE'
END      
0
Comment
Question by:jholmes0724
  • 4
  • 3
  • 2
9 Comments
 

Author Comment

by:jholmes0724
Comment Utility
One other note:   Here is what the output looks like when i DO NOT concatenate and just Print out each RecCount Value and @Body value usint SET @Body = 'TEXT HERE'   So I know I am getting values from the cursors select statement:

1
Table Name: AARP_DATA_D1_BillMatrix - Change Desc: TeST
2
Table Name: AARP_DATA_D1_BillMatrix - Change Desc: Record Updated where Company = AARP and Region = CRBLA and Model Name = 3810S and TranslateModel = TestModel
3
Table Name: AARP_DATA_D1_BillMatrix - Change Desc: Record Updated where Company = AARP and Region = CRBLA and Model Name = 3810S
4
Table Name: LVRG_CTRL_DelivLookupTable - Change Desc: Record Updated for Company AALP and Deliv = ASDT001
5
Table Name: LVRG_CTRL_DelivLookupTable - Change Desc: Record Updated for Company AARP and Deliv = DT004
6
Table Name: LVRG_CTRL_DelivLookupTable - Change Desc: Record Updated for Company AARP and Deliv = DT004
7
Table Name: LVRG_CTRL_DelivLookupTable - Change Desc: Record Updated for Company AALP and Deliv = ASDT001
8
Table Name: LVRG_CTRL_DelivLookupTable - Change Desc: Record Updated for Company AALP and Deliv = ASDT001
9
Table Name: LVRG_CTRL_SiteLookupTable - Change Desc: Record Updated for Company AARP and Location_Code value: RFD
Final Body: = Table Name: LVRG_CTRL_SiteLookupTable - Change Desc: Record Updated for Company AARP and Location_Code value: RFD
DONE
0
 
LVL 10

Expert Comment

by:Jini Jose
Comment Utility
when the result is blank, any of your values should be null. kindly check the values
0
 

Author Comment

by:jholmes0724
Comment Utility
I have, I did have some that where null and I fixed that but I still got the same issue.
0
 
LVL 10

Expert Comment

by:Jini Jose
Comment Utility
if you get a blank value on a set stament, then it should be a null value in the string value.
0
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 
LVL 3

Accepted Solution

by:
jvejskrab earned 500 total points
Comment Utility

try

SET @Body = @Body + 'Table Name: ' + ISNULL(@TableName,'') + ' - Change Desc: ' + ISNULL(@Comments,'') + CHAR(13)
0
 

Author Comment

by:jholmes0724
Comment Utility
Not sure what you are getting at, The variable @Body Gets a string value right in the beginning of the SP.  The Final Output of the @Body variable would never be null.   I am trying to add another line to the string Variable @Body on every iteration of the cursor loop.  I DO NOT Get a blank value if I simply set the variable like this @Body = @TableName.  It will store the value of @TableName in the @Body Variable but as soon as I try to add to the @Body Varialbe using SET @Body = @Boday + 'Additionl values'  it does not work.   That is what I am trying to get answered.  Please explain why you keep asking me about the null values, there are no null values.
0
 
LVL 3

Expert Comment

by:jvejskrab
Comment Utility
weird, there must be some NULL values in comments or tableName. Concatenating string and NULL = NULL
0
 

Author Closing Comment

by:jholmes0724
Comment Utility
Thank you very much.  Sorry I didn't understand why the null was an issue but using this code makes it work.  I still don't fully understand why.  But that's why your the expert.   Thanks again.
0
 
LVL 3

Expert Comment

by:jvejskrab
Comment Utility

It depend's on database setting CONCAT_NULL_YIELDS_NULL (right click on database in MS -> Properties -> options -> Concatenate.... )

or you can write in your script:

SET CONCAT_NULL_YIELDS_NULL ON
SET CONCAT_NULL_YIELDS_NULL OFF

another solution could be SET CONCAT_NULL_YIELDS_NULL OFF in the beginning of the script and then you can use the SET command without ISNULL
0

Featured Post

Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

Join & Write a Comment

In this article—a derivative of my DaytaBase.org blog post (http://daytabase.org/2011/06/18/what-week-is-it/)—I will explore a few different perspectives on which week today's date falls within using Microsoft SQL Server. First, to frame this stu…
Introduction In my previous article (http://www.experts-exchange.com/Microsoft/Development/MS-SQL-Server/SSIS/A_9150-Loading-XML-Using-SSIS.html) I showed you how the XML Source component can be used to load XML files into a SQL Server database, us…
This video shows how to set up a shell script to accept a positional parameter when called, pass that to a SQL script, accept the output from the statement back and then manipulate it in the Shell.
Via a live example, show how to set up a backup for SQL Server using a Maintenance Plan and how to schedule the job into SQL Server Agent.

763 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

6 Experts available now in Live!

Get 1:1 Help Now