Solved

Adding a field to a temp table

Posted on 2008-10-06
1
164 Views
Last Modified: 2012-05-05
I am using the following code, see attached code in my query to convert an image to rtf.

At present the two fields outputted are applicantid, RTF

I want to add another field to the output, but cannot seem to be able to do so.

The field is p.surname which is of varchar(20)

i.e.

DECLARE YourCursor CURSOR
        FOR SELECT  c.applicantid, p.surname                    
            FROM    applicant a
                    LEFT OUTER JOIN coverletter c ON a.applicantid = c.applicantid
                    LEFT OUTER JOIN PersonalInformation p ON a.ApplicantID = p.ApplicantID
            WHERE   c.date_dt >= @start and c.date_dt < @end
           
Can anybody help?
IF OBJECT_ID('tempdb.dbo.#Temp') IS NOT NULL 

   DROP TABLE #Temp
 

DECLARE @start DATETIME

DECLARE @end DATETIME
 
 

SET @start = DATEADD(day, -67, CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 120), 120))

SET @end = DATEADD(day, 1, @start)
 

DECLARE @TxtPtr BINARY(16),

        @applicantid INTEGER,

        @Data VARCHAR(8000),

        @Offset INTEGER

SET              NOCOUNT ON

CREATE TABLE #Temp

       (

         applicantid INTEGER,

         RTF TEXT

       )

DECLARE YourCursor CURSOR

        FOR SELECT  c.applicantid                    

            FROM    applicant a

                    LEFT OUTER JOIN coverletter c ON a.applicantid = c.applicantid

                    LEFT OUTER JOIN PersonalInformation p ON a.ApplicantID = p.ApplicantID

            WHERE   c.date_dt >= @start and c.date_dt < @end

OPEN YourCursor

FETCH NEXT FROM YourCursor INTO @applicantid

WHILE @@FETCH_STATUS = 0

      BEGIN

            INSERT  #Temp ( applicantid, RTF )

            VALUES  ( @applicantid, '' )

            SELECT  @TxtPtr = TEXTPTR(RTF),

                    @OffSet = 0

            FROM    #Temp

            WHERE   applicantid = @applicantid

            WHILE @OffSet IS NOT NULL

                  BEGIN

                        SELECT  @Data = CAST(CAST(SUBSTRING(document_im, @Offset + 1, 8000) AS VARBINARY(8000)) AS VARCHAR(8000))

                        FROM    coverletter

                        WHERE   applicantid = @applicantid

                        IF LEN(@Data) > 0 

                           BEGIN

                                 UPDATETEXT #Temp.RTF @TxtPtr @Offset NULL @Data

                                 SET @OffSet = @OffSet + 8000

                           END

                        ELSE 

                           BEGIN

                                 SET @OffSet = NULL

                           END

                  END

            FETCH NEXT FROM YourCursor INTO @applicantid

      END

CLOSE YourCursor

DEALLOCATE YourCursor

SELECT  applicantid,

        RTF

FROM    #Temp

DROP TABLE #Temp

Open in new window

0
Comment
Question by:halifaxman
1 Comment
 
LVL 32

Accepted Solution

by:
Daniel Wilson earned 500 total points
ID: 22649957
Not sure what you're needing to DO w/ surname once you get it ... but this should get it into the table for you.

--http://www.experts-exchange.com/Q_23790211.html
 

IF OBJECT_ID('tempdb.dbo.#Temp') IS NOT NULL 

   DROP TABLE #Temp

 

DECLARE @start DATETIME

DECLARE @end DATETIME

 

 

SET @start = DATEADD(day, -67, CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 120), 120))

SET @end = DATEADD(day, 1, @start)

 

DECLARE @TxtPtr BINARY(16),

        @applicantid INTEGER,

		@surname varchar(20),

        @Data VARCHAR(8000),

        @Offset INTEGER

SET              NOCOUNT ON

CREATE TABLE #Temp

       (

         applicantid INTEGER,

		surname varchar(20),

         RTF TEXT

       )

DECLARE YourCursor CURSOR

        FOR SELECT  c.applicantid , p.surname                    

            FROM    applicant a

                    LEFT OUTER JOIN coverletter c ON a.applicantid = c.applicantid

                    LEFT OUTER JOIN PersonalInformation p ON a.ApplicantID = p.ApplicantID

            WHERE   c.date_dt >= @start and c.date_dt < @end

OPEN YourCursor

FETCH NEXT FROM YourCursor INTO @applicantid, @Surname

WHILE @@FETCH_STATUS = 0

      BEGIN

            INSERT  #Temp ( applicantid, surname, RTF )

            VALUES  ( @applicantid, @surname, '' )

            SELECT  @TxtPtr = TEXTPTR(RTF),

                    @OffSet = 0

            FROM    #Temp

            WHERE   applicantid = @applicantid

            WHILE @OffSet IS NOT NULL

                  BEGIN

                        SELECT  @Data = CAST(CAST(SUBSTRING(document_im, @Offset + 1, 8000) AS VARBINARY(8000)) AS VARCHAR(8000))

                        FROM    coverletter

                        WHERE   applicantid = @applicantid

                        IF LEN(@Data) > 0 

                           BEGIN

                                 UPDATETEXT #Temp.RTF @TxtPtr @Offset NULL @Data

                                 SET @OffSet = @OffSet + 8000

                           END

                        ELSE 

                           BEGIN

                                 SET @OffSet = NULL

                           END

                  END

            FETCH NEXT FROM YourCursor INTO @applicantid, @Surname

      END

CLOSE YourCursor

DEALLOCATE YourCursor

SELECT  applicantid, surname,

        RTF

FROM    #Temp

DROP TABLE #Temp

Open in new window

0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

PL/SQL can be a very powerful tool for working directly with database tables. Being able to loop will allow you to perform more complex operations, but can be a little tricky to write correctly. This article will provide examples of basic loops alon…
This article describes how to use the timestamp of existing data in a database to allow Tableau to calculate the prior work day instead of relying on case statements or if statements to calculate the days of the week.
This video explains how to create simple products associated to Magento configurable product and offers fast way of their generation with Store Manager for Magento tool.
This is a video describing the growing solar energy use in Utah. This is a topic that greatly interests me and so I decided to produce a video about it.

948 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

18 Experts available now in Live!

Get 1:1 Help Now