• I got the chunks apart... So I guess it's a place to start.  You need Jeff's string splitter function for this, which is here.  And here's my code... You would do this against a table with a select query, but you didn't give me a table, so I cheated some.

    DECLARE @ChangeString VARCHAR(100) = '|LastName:Smith|Jones|FirstName:Bill|William';

    SET @ChangeString = RIGHT(@ChangeString,LEN(@ChangeString)-1);

    SELECT x.ItemNumber
        , x.Item
    FROM Scratchpad.dbo.DelimitedSplit8K(@ChangeString, '|') x;

    INSERT INTO #TempNames(ItemNumber, Item)
    (SELECT x.ItemNumber
        , x.Item
    FROM Scratchpad.dbo.DelimitedSplit8K(@ChangeString,'|') x );

    SELECT RecID
        , ItemNumber
        , Item
        , RIGHT(Item,LEN(Item) - CHARINDEX(':', Item)) AS NamePart
        , CASE WHEN ItemNumber%2=1 THEN 'Old Value' ELSE 'New Value' END WhichVal
    FROM #TempNames;