• The reason for the bad performance is you're 'climbing up' one level each time you select one of the values from the Circuit node. Try to use CROSS APPLY instead.

    I'd guess it's at least 10 times faster with your data than your current code...

    insert into [MiddletownData].[dbo].[RectifierData]

    select

    U.Circuits.value('@Name', 'nvarchar(10)') as CircuitName,

    U.Circuits.value('@ProcID', 'nchar(10)') as ProcID,

    U.Circuits.value('@PrgStp', 'int') as PrgStp,

    U.Circuits.value('@Mode', 'int') as Mode,

    U.Circuits.value('@A', 'float') as Amps,

    U.Circuits.value('@StpAH', 'float') as StpAH,

    U.Circuits.value('@V', 'float') as Volts,

    U.Circuits.value('@StpT', 'float') as StpT,

    U.Circuits.value('@RunTime', 'int') as RunTime,

    U.Circuits.value('@Tick', 'nchar(4)') as Tick,

    U.Circuits.value('@Pwr', 'char(5)') as Pwr,

    U.Circuits.value('@TLeft', 'float') as TLeft,

    U.Circuits.value('@AccumAH', 'float') as AccumAH,

    U.Circuits.value('@Alarm', 'nchar(2)') as Alarm,

    U.Circuits.value('@ProcStart', 'Datetime') as ProcStart,

    U.Circuits.value('@ProcEnd', 'Datetime') as ProcEnd,

    U.Circuits.value('@ProcFree', 'Datetime') as ProcFree,

    T.Circuit.value('@Name', 'nvarchar(15)') as PrgName

    from @data.nodes('Circuits/Circuit') as U(Circuits)

    cross apply Circuits.nodes('Prg') T(Circuit)



    Lutz
    A pessimist is an optimist with experience.

    How to get fast answers to your question[/url]
    How to post performance related questions[/url]
    Links for Tally Table [/url] , Cross Tabs [/url] and Dynamic Cross Tabs [/url], Delimited Split Function[/url]