Results 1 to 4 of 4

Thread: how to update text field

  1. #1
    Join Date
    Oct 2002
    Location
    queens
    Posts
    139

    how to update text field

    Hi all,

    I have a table with millions of records, table has three fields: case_id,line_no and notedata field, notedata field is 60 chars long, datatype varchar.for each case_id there could be as many as 2000 line_no meaning 2000 notes. I need to compress these notes into one note by case_no, For example case_no 1 could have 2000 lines of notes but my comressed table shoul have only one line containing all 2000 notes in line_no sequence.

    my compressed table contains two fields case_no and notetext, notetext is a text field.

    here is the script I am trying to use to accomplish the task but it does not append more than 8000 chars in one case, so my notes are chopping of, how should I do this, please let me know of any suggestions..

    Thanks.



    truncate table eldoecinotescompressed
    insert into eldoecinotescompressed (app_code, case_no)
    select distinct app_code, substring(system_key, 6,8)
    from eldoecinotes

    DECLARE @case VARCHAR(20);
    DECLARE @note VARCHAR(80);
    DECLARE @lineno VARCHAR(5);

    DECLARE notes_cursor CURSOR FOR
    select substring(system_key, 6,8) case_no, line_no, rtrim(notedata) notedata FROM EldoECINotes
    where substring(system_key, 6,8)<>''
    order by 1,2;
    OPEN notes_cursor;
    FETCH NEXT FROM notes_cursor into @case, @lineno, @note;
    WHILE (@@FETCH_STATUS = 0)
    BEGIN

    BEGIN TRANSACTION;
    update eldoecinotescompressed
    set notetext =
    (case when isnull(datalength(notetext), 0) >= 0 then
    substring(isnull(notetext,''), 1, 8000)
    else '' end ) +
    (case when isnull(datalength(notetext), 0) > 8000 then
    substring(isnull(notetext,''), 8001, 8000)
    else '' end ) +
    (case when isnull(datalength(notetext), 0) > 16000 then
    substring(isnull(notetext,''), 16001, 8000)
    else '' end ) +
    (case when isnull(datalength(notetext), 0) > 24000 then
    substring(isnull(notetext,''), 24001, 8000)
    else '' end ) +
    (case when isnull(datalength(notetext), 0) > 32000 then
    substring(isnull(notetext,''), 32001, 8000)
    else '' end ) +
    (case when isnull(datalength(notetext), 0) > 40000 then
    substring(isnull(notetext,''), 40001, 8000)
    else '' end ) +
    (case when isnull(datalength(notetext), 0) > 48000 then
    substring(isnull(notetext,''), 48001, 8000)
    else '' end ) +
    (case when isnull(datalength(notetext), 0) > 56000 then
    substring(isnull(notetext,''), 56001, 8000)
    else '' end ) +
    (case when isnull(datalength(notetext), 0) > 64000 then
    substring(isnull(notetext,''), 64001, 8000)
    else '' end ) +
    (case when isnull(datalength(notetext), 0) > 72000 then
    substring(isnull(notetext,''), 72001, 8000)
    else '' end ) +
    (case when isnull(datalength(notetext), 0) > 80000 then
    substring(isnull(notetext,''), 80001, 8000)
    else '' end ) +
    (case when isnull(datalength(notetext), 0) > 88000 then
    substring(isnull(notetext,''), 88001, 8000)
    else '' end ) +
    (case when isnull(datalength(notetext), 0) > 96000 then
    substring(isnull(notetext,''), 96001, 8000)
    else '' end ) +
    (case when isnull(datalength(notetext), 0) > 104000 then
    substring(isnull(notetext,''), 104001, 8000)
    else '' end ) +
    (case when isnull(datalength(notetext), 0) > 112000 then
    substring(isnull(notetext,''), 112001, 8000)
    else '' end ) +
    (case when isnull(datalength(notetext), 0) > 120000 then
    substring(isnull(notetext,''), 120001, 8000)
    else '' end ) +
    (case when isnull(datalength(notetext), 0) > 128000 then
    substring(isnull(notetext,''), 128001, 8000)
    else '' end ) +
    (case when isnull(datalength(notetext), 0) > 136000 then
    substring(isnull(notetext,''), 136001, 8000)
    else '' end ) +
    (case when isnull(datalength(notetext), 0) > 144000 then
    substring(isnull(notetext,''), 144001, 8000)
    else '' end ) +
    (case when isnull(datalength(notetext), 0) > 152000 then
    substring(isnull(notetext,''), 152001, 8000)
    else '' end ) +
    (case when isnull(datalength(notetext), 0) > 0 then
    char(13) + char(10)
    else '' end) +
    isnull(@note,'')
    where case_no=@case;
    commit;
    FETCH NEXT FROM notes_cursor into @case, @lineno, @note;
    END
    CLOSE notes_cursor;
    DEALLOCATE notes_cursor;

  2. #2
    Join Date
    Sep 2002
    Posts
    169
    You need to use UPDATETEXT for this sort of operation.

    The UPDATE command is really does not handle text datatypes that well as you are finding.

    I think that something like the following will work for you


    truncate table eldoecinotescompressed
    insert into eldoecinotescompressed (app_code, case_no)
    select distinct app_code, substring(system_key, 6,8)
    from eldoecinotes

    DECLARE @case VARCHAR(20);
    DECLARE @note VARCHAR(80);
    DECLARE @lineno VARCHAR(5);


    DECLARE @ptrval binary(16)


    DECLARE notes_cursor CURSOR FOR
    select substring(system_key, 6,8) case_no, line_no, rtrim(notedata) notedata FROM EldoECINotes
    where substring(system_key, 6,8)<>''
    order by 1,2;
    OPEN notes_cursor;
    FETCH NEXT FROM notes_cursor into @case, @lineno, @note;
    WHILE (@@FETCH_STATUS = 0)
    BEGIN

    BEGIN TRANSACTION;

    SELECT @ptrval = TEXTPTR(notetext)
    FROM eldoecinotescompressed p
    WHERE case_no=@case

    UPDATETEXT commit;
    FETCH NEXT FROM notes_cursor into @case, @lineno, @note;
    ENDeldoecinotescompressed.notetext @ptrval null null @note



    CLOSE notes_cursor;
    DEALLOCATE notes_cursor;

  3. #3
    Join Date
    Oct 2002
    Location
    queens
    Posts
    139
    I'm having problem with the following part

    UPDATETEXT commit;
    FETCH NEXT FROM notes_cursor into @case, @lineno, @note;
    ENDeldoecinotescompressed.notetext @ptrval null null @note

    Saying syntax error...

  4. #4
    Join Date
    Sep 2002
    Posts
    169
    I dunno what happened to my reply - that certainly isn't what I remember. However, lets try it again...



    truncate table eldoecinotescompressed
    insert into eldoecinotescompressed (app_code, case_no)
    select distinct app_code, substring(system_key, 6,8)
    from eldoecinotes

    DECLARE @case VARCHAR(20);
    DECLARE @note VARCHAR(80);
    DECLARE @lineno VARCHAR(5);


    DECLARE @ptrval binary(16)


    DECLARE notes_cursor CURSOR FOR
    select substring(system_key, 6,8) case_no, line_no, rtrim(notedata) notedata FROM EldoECINotes
    where substring(system_key, 6,8)<>''
    order by 1,2;
    OPEN notes_cursor;
    FETCH NEXT FROM notes_cursor into @case, @lineno, @note;
    WHILE (@@FETCH_STATUS = 0)
    BEGIN

    BEGIN TRANSACTION;

    SELECT @ptrval = TEXTPTR(notetext)
    FROM eldoecinotescompressed p
    WHERE case_no=@case

    UPDATETEXT eldoecinotescompressed.notetext @ptrval null null @note
    commit;
    FETCH NEXT FROM notes_cursor into @case, @lineno, @note;
    END




    CLOSE notes_cursor;
    DEALLOCATE notes_cursor;

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •