stored proc to handle XML as input param for multiple record inserts
I c an't speak for performance but this is one way of doing things.

declare @x xml

select @x = '&lt;MessageRecipient&gt; 
&lt;MessageId&gt;52&lt;/MessageId&gt; 

&lt;Recipient&gt;
        &lt;RecipientTypeId&gt;2&lt;/RecipientTypeId&gt;
        &lt;EmailAddress&gt;dig.s@mail.com&lt;/EmailAddress&gt;
        &lt;FriendlyName&gt;dig s&lt;/FriendlyName&gt;
        &lt;UFID&gt;dig123&lt;/UFID&gt;
&lt;/Recipient&gt; 

&lt;Recipient&gt;
    &lt;RecipientTypeId&gt;3&lt;/RecipientTypeId&gt;
    &lt;EmailAddress&gt;ash.k@mail.com&lt;/EmailAddress&gt;
    &lt;FriendlyName&gt;ash k&lt;/FriendlyName&gt;&lt;UFID&gt;ashish&lt;/UFID&gt;
&lt;/Recipient&gt; 

&lt;Recipient&gt;
    &lt;RecipientTypeId&gt;4&lt;/RecipientTypeId&gt;
    &lt;EmailAddress&gt;dee.v@mail.com&lt;/EmailAddress&gt;
    &lt;FriendlyName&gt;dee v&lt;/FriendlyName&gt;
    &lt;UFID&gt;dee123&lt;/UFID&gt;
&lt;/Recipient&gt; 
&lt;/MessageRecipient&gt;'


select 
    Finaldata.R.value ('../MessageId[1]', 'NVARCHAR(10)') AS MessageID
    , Finaldata.R.value ('RecipientTypeId[1]', 'INT') AS RecipientTypeId
    , Finaldata.R.value ('EmailAddress[1]', 'NVARCHAR(200)') AS EmailAddress
    , Finaldata.R.value ('FriendlyName[1]', 'NVARCHAR(100)') AS FriendlyName
    , Finaldata.R.value ('UFID[1]', 'NVARCHAR(10)') AS UFID
from @x.nodes ('//MessageRecipient/Recipient') as Finaldata (R)