Home Forums Programming XML Spliting XML file into Parent/Child table using SSIS package RE: Spliting XML file into Parent/Child table using SSIS package

  • You can solve this by shreding the data into the two tables by using the nodes functions. I have created this example:

    --create our tables

    CREATE TABLE Jobs (JobCode INT PRIMARY KEY CLUSTERED, Title VARCHAR(100))

    CREATE TABLE Locations (JobCode INT, Description VARCHAR(100))

    ALTER TABLE Locations ADD CONSTRAINT FK_Locations_Jobs FOREIGN KEY(JobCode) REFERENCES Jobs(Jobcode)

    --load data into variable

    DECLARE @xml XML

    SET @xml = '<jobs>

    <job>

    <jobCode>12345</jobCode>

    <title>.NET Developer</title>

    <locations>

    <location>

    <description>New York</description>

    </location>

    <location>

    <description>Philadelphia</description>

    </location>

    </locations>

    </job>

    <job>

    <jobCode>67890</jobCode>

    <title>Database Administrator</title>

    <locations>

    <location>

    <description>New York</description>

    </location>

    <location>

    <description>Denver</description>

    </location>

    </locations>

    </job>

    </jobs>'

    --insert our data into jobs

    INSERT INTO Jobs

    SELECT t.c.value('(jobCode/text())[1]', 'int')

    , t.c.value('(title/text())[1]', 'varchar(100)')

    FROM @xml.nodes('/jobs/job') T(c)

    --insert our data into locations

    INSERT INTO Locations

    SELECT t.c.value('(jobCode/text())[1]', 'int')

    , u.c.value('(description/text())[1]', 'varchar(100)')

    FROM @xml.nodes('/jobs/job') T(c)

    CROSS APPLY T.c.nodes('locations/location') u(c)

    SELECT * FROM Jobs

    SELECT * FROM Locations

    this create two tables Jobs and locations and there is a foreign key from locations -> jobs. The first insert statement shreds the job data into the Jobs table and the second insert statement shreds the location data into the locations table.