Solved

SQL Server 2000 Cursor Issue with Variable Values adding concatenated text

Posted on 2010-08-30
9
411 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3
  • 2
9 Comments
 

Author Comment

by:jholmes0724
ID: 33560976
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
ID: 33561003
when the result is blank, any of your values should be null. kindly check the values
0
 

Author Comment

by:jholmes0724
ID: 33561029
I have, I did have some that where null and I fixed that but I still got the same issue.
0
How Do You Stack Up Against Your Peers?

With today’s modern enterprise so dependent on digital infrastructures, the impact of major incidents has increased dramatically. Grab the report now to gain insight into how your organization ranks against your peers and learn best-in-class strategies to resolve incidents.

 
LVL 10

Expert Comment

by:Jini Jose
ID: 33561040
if you get a blank value on a set stament, then it should be a null value in the string value.
0
 
LVL 3

Accepted Solution

by:
jvejskrab earned 500 total points
ID: 33561146

try

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

Author Comment

by:jholmes0724
ID: 33561173
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
ID: 33561318
weird, there must be some NULL values in comments or tableName. Concatenating string and NULL = NULL
0
 

Author Closing Comment

by:jholmes0724
ID: 33561333
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
ID: 33561421

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

How our DevOps Teams Maximize Uptime

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us. Read the use case whitepaper.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

For both online and offline retail, the cross-channel business is the most recent pattern in the B2C trade space.
In the first part of this tutorial we will cover the prerequisites for installing SQL Server vNext on Linux.
Via a live example, show how to extract insert data into a SQL Server database table using the Import/Export option and Bulk Insert.
Viewers will learn how the fundamental information of how to create a table.

734 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