Best way of order processing
This is probably best to insert all items at once or at least avoid have to split string on the SQL Server side.



You could convert json to xml similar to this:

&lt;Order OrderId="" OrderDate="" CustomerId="" Price="300"&gt;
    &lt;Items&gt;
        &lt;Item ItemId="103" Qty="2" Price="100" /&gt;
        &lt;Item ItemId="123" Qty="2" Price="100" /&gt;
        &lt;Item ItemId="122" Qty="2" Price="100" /&gt;
    &lt;/Items&gt;
&lt;/Order&gt;


You can then execute this stored procedure with this xml parameter:

CREATE PROC InsertItems(
    @xml xml
) AS
BEGIN
    SET NOCOUNT ON  

    INSERT INTO data(ItemId, Qty, Price)
    SELECT x.value('@ItemId', 'int') as ItemId
        , x.value('@Qty', 'int') as Qty
        , x.value('@Price', 'int') as Price
    FROM @xml.nodes('/Order/Items/Item') t(x)
END


You must add the nodes and value path to your xml.

It should work fine for a few rows but it may not be very efficient with hundreds or thousands of Items.  



You can also create a Table Type and pass is to the stored procedure using a Table-Valued Parameters:

CREATE TYPE dbo.ItemsTableType AS TABLE
    ( ItemId int, Qty int, Price int)

CREATE PROCEDURE insertItems
    (@items dbo.ItemsTableType READONLY)
AS
BEGIN
    SET NOCOUNT ON  

    INSERT INTO data(ItemId, Qty, Price)
    SELECT ItemId, Qty, Price
    FROM @items 
END


You then call it from your code using one of the .Net options and examples on this page: Table-Valued Parameters.

If you have to insert too many rows at once, you can split it in batch of 100, 1000 or whatever works best on your system.