Solved

Adding a field to a temp table

Posted on 2008-10-06
1
168 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
[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
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 DevOps Pipeline Leaking?

Is your CI/CD pipeline a hodge-podge of randomly connected tools? You’ve likely got a tool to fix one problem & then a different tool to fix another, resulting in a cluster of tools with overlapping functionality. Learn how to optimize your pipeline with Gartner's recommendations

Question has a verified solution.

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

If you have heard of RFC822 date formats, they can be quite a challenge in SQL Server. RFC822 is an Internet standard format for email message headers, including all dates within those headers. The RFC822 protocols are available in detail at:   ht…
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.
Nobody understands Phishing better than an anti-spam company. That’s why we are providing Phishing Awareness Training to our customers. According to a report by Verizon, only 3% of targeted users report malicious emails to management. With compan…
Suggested Courses

732 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