Here is an example of using FOR XML to compose old relational data into xml then shred into a new table. #contract is the header table from the old database and #details are the contract details. #newContract is the new table for contracts.
CREATE
--DROP
TABLE #contract
(
ID INT,
other INT
)
CREATE TABLE #details
(
ID INT,
Name VARCHAR(100),
Length INT
)
INSERT INTO #contract VALUES (1, 2)
INSERT INTO #contract VALUES (2, 2)
INSERT INTO #contract VALUES (3, 2)
INSERT INTO #contract VALUES (10, 2)
INSERT INTO #details VALUES (1, 'asdf', 3)
INSERT INTO #details VALUES (1, 'asfadf', 3)
INSERT INTO #details VALUES (1, 'asfdadf', 3)
INSERT INTO #details VALUES (1, 'cccasdf', 3)
INSERT INTO #details VALUES (2, 'asdf', 3)
INSERT INTO #details VALUES (2, 'asfadf', 3)
INSERT INTO #details VALUES (2, 'asfdadf', 3)
INSERT INTO #details VALUES (2, 'cccasdf', 3)
INSERT INTO #details VALUES (3, 'asdf', 3)
INSERT INTO #details VALUES (3, 'asfadf', 3)
INSERT INTO #details VALUES (3, 'asfdadf', 3)
INSERT INTO #details VALUES (3, 'cccasdf', 3)
INSERT INTO #details VALUES (10, 'asdf', 3)
INSERT INTO #details VALUES (10, 'asfadf', 3)
INSERT INTO #details VALUES (10, 'asfdadf', 3)
INSERT INTO #details VALUES (10, 'cccasdf', 3)
CREATE TABLE #newContract
(
ID INT IDENTITY PRIMARY KEY,
ContractID INT,
Contract xml
)
WITH contractXML(data)
AS
(
SELECT C.ID, D.Name, D.Length FROM #contract as c
JOIN #details AS D ON D.ID = C.ID
FOR XML AUTO, TYPE
)
INSERT INTO #newContract
SELECT T.C.value('@ID', 'INT'), T.C.query('.') FROM contractXML
CROSS APPLY data.nodes('c') AS T(C)
SELECT * FROM #newContract
ID ContractID Contract
----------- ----------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 1 <c ID="1"><D Name="asdf" Length="3" /><D Name="asfadf" Length="3" /><D Name="asfdadf" Length="3" /><D Name="cccasdf" Length="3" /></c>
2 2 <c ID="2"><D Name="asdf" Length="3" /><D Name="asfadf" Length="3" /><D Name="asfdadf" Length="3" /><D Name="cccasdf" Length="3" /></c>
3 3 <c ID="3"><D Name="asdf" Length="3" /><D Name="asfadf" Length="3" /><D Name="asfdadf" Length="3" /><D Name="cccasdf" Length="3" /></c>
4 10 <c ID="10"><D Name="asdf" Length="3" /><D Name="asfadf" Length="3" /><D Name="asfdadf" Length="3" /><D Name="cccasdf" Length="3" /></c>