• I've done such a migration 4 years ago - migrate a IMS db to Sql server and mainframe cobol to Microfocus COBOL. we kept the core code in COBOL but the db interface was converted to C# using sql client calls.

    http://www.tutorialspoint.com/ims_db/ims_db_quick_guide.htm contains information about IMS but you better off asking the developers as implementation can change depending on the application.

    In order to understand how the records link to each other you should ask the client developers to see if they have a common ims access cobol program where all calls are executed through.

    And ask them how do you call it when they wish to do the following operations

    1 - read single record directly

    2 - position a record pointer to a record on the chain

    3 - read first or last record on a chain

    4 - read next or prior record on the chain

    In most cases the cobol program will setup the "key" to access the dataset and then call one of the IMS functions to access the data as per above.

    Possible examples

    MOVE 123 to invoice-number

    call IMS using get-first

    Invoice-record-line

    ...process record

    then on a loop until eof or invoice-number not equal required number

    call IMS using get-next

    Invoice-record-line

    process record

    It is likely that your client has cobol copybooks that define each individual IMS record they deal with - those copybooks may have indication of which are the key fields for each record.

    You will also need to consider that it is highly likely that a IMS dataset contains several type of records and that you will need to create a sql table for each type of record.

    Adding to this it will also be highly likely that a IMS record will contain COBOL packed/binary data - you can't just extract the record as is and load to SQL - you will need to convert it to a edited version of of the fields prior to loading to SQL.

    And... you said you are migration from cobol to sqlserver/.net - has your client considered the possibility of keeping part of the COBOL code?