Data transfer between databases with different structures

  • This should be pretty straight forward to any SQL guru out there, but not really my forte. So would appreciate any help

    Ok say we've got two databases with two tables and we need to

    transfer data from one to another. However, the data structure in

    sourceDB is different to targetDB. Better to illustrate:

    sourceDB

    tablesource

    PIN     SYSTEM  HEADER  PROPERTY        VALUE   STATUS

    1000    AF      ADDRESS DETAILS LINE 1  The Grange      Active

    1000    AF      ADDRESS DETAILS LINE 2  69 Tintagel Way

    1000    AF      ADDRESS DETAILS LINE 3  Woking

    1001    AF      ADDRESS DETAILS LINE 1  50      Active

    8888    AF      ADDRESS DETAILS LINE 2  Evans Way

    8888    AF      ADDRESS DETAILS LINE 3  Islington

    8888    AF      ADDRESS DETAILS

    8888    AF      ADDRESS DETAILS

    8888    AF      ADDRESS DETAILS

    Now each matching PIN on the multiple rows in sourceDB above relates to

    one customer. In order to extract the relevant info for an address for

    instance for each customer, we need to know the unique PIN, header,

    property and value fields.

    So I created this piece of SQL which to give me the result in targetDB:

    INSERT targetDB.dbo.targettbl (pin, address1, address2, address3, MemberNo, Tel1, Tel2, Tel3, Tel4, DOB, Email, IDNumber, Title, Initials, Firstname, Surname, STATUS)

    SELECT

      PIN,

      MAX(CASE WHEN HEADER = 'ADDRESS DETAILS' AND PROPERTY = 'LINE 1' THEN VALUE ELSE NULL END) AS address1,

      MAX(CASE WHEN HEADER = 'ADDRESS DETAILS' AND PROPERTY = 'LINE 2' THEN VALUE ELSE NULL END) AS address2,

      MAX(CASE WHEN HEADER = 'ADDRESS DETAILS' AND PROPERTY = 'LINE 3' THEN VALUE ELSE NULL END) AS address3,

      MAX(CASE WHEN HEADER = 'AFORBES' AND PROPERTY = 'Membership Number' THEN VALUE ELSE NULL END) AS MemberNo,

    MAX(CASE WHEN HEADER = 'AFS' AND PROPERTY = 'Membership Number' THEN STATUS ELSE NULL END) AS STATUS,

      MAX(CASE WHEN HEADER = 'CONTACT DETAILS' AND PROPERTY = 'Preferred method of contact*' THEN VALUE ELSE NULL END) AS Tel1,

    MAX(CASE WHEN HEADER = 'CONTACT DETAILS' AND PROPERTY = 'Tel number (o/h) e.g. 011 2690000' THEN VALUE ELSE NULL END) AS Tel2,

    MAX(CASE WHEN HEADER = 'CONTACT DETAILS' AND PROPERTY = 'Mobile number e.g. 0821234567' THEN VALUE ELSE NULL END) AS Tel3,

    MAX(CASE WHEN HEADER = 'CONTACT DETAILS' AND PROPERTY = 'Fax number e.g. 011 2691000' THEN VALUE ELSE NULL END) AS Tel4,

    MAX(CASE WHEN HEADER = 'Date Of Birth' AND PROPERTY = 'eg. 04 Jan 1965' THEN VALUE ELSE NULL END) AS DOB,

    MAX(CASE WHEN HEADER = 'Email address' AND PROPERTY = 'Email Address' THEN VALUE ELSE NULL END) AS Email,

    MAX(CASE WHEN HEADER = 'ID Number' AND PROPERTY = 'Some ID Number' THEN VALUE ELSE NULL END) AS IDNumber,

    MAX(CASE WHEN HEADER = 'Member Information' AND PROPERTY = 'Title' THEN VALUE ELSE NULL END) AS Title,

    MAX(CASE WHEN HEADER = 'Member Information' AND PROPERTY = 'Initials' THEN VALUE ELSE NULL END) AS Initials,

    MAX(CASE WHEN HEADER = 'Member Information' AND PROPERTY = 'Firstname' THEN VALUE ELSE NULL END) AS Firstname,

    MAX(CASE WHEN HEADER = 'Member Information' AND PROPERTY = 'Surname' THEN VALUE ELSE NULL END) AS Surname

    FROM

    sourceDB.dbo.sourcetbl

    GROUP BY PIN

    However, keep getting this message:

    Msg 8152, Level 16, State 14, Line 1

    String or binary data would be truncated.

    The statement has been terminated.

    Warning: Null value is eliminated by an aggregate or other SET operation.

    What am I doing wrong here????? Argggh!!!??

    Many thanks in advance,

    Paul

  • This was removed by the editor as SPAM

  • can you post the DDL for targettbl? from the error message, it appears you are trying to insert a value that is too big for one of the columns.

    ---------------------------------------
    elsasoft.org

  • Actually, the DDL for both tables would be helpful.

    Chances are, as jezemine suggests, one or more of your source columns is/are shorter than the destination.

    Hope this helps..


    Take care..

    - Ward Pond
    blogs.technet.com/wardpond

Viewing 4 posts - 1 through 3 (of 3 total)

You must be logged in to reply to this topic. Login to reply