我正在嘗試在C#中創建一個小型控制檯應用程序,以便以最快的方式根據XML文件的內容在SQL Server 2008中的產品(ITEMS)的表上執行插入操作。我已經有一個.XSD文件,其中包含適當的映射到SQL表(這可能不需要使用下面概述的方法)。來自XML的SQL Server表上的Upsert
這裏是我的方法的高層次:
- 讀取XML,用它來創建一個表。
- 使用從XML文件創建的表,對ITEMS表執行MERGE。 2a。如果該項目存在,請更新它。
2b。如果該項目不存在,請插入它。 - 僅創建插入到XML中的記錄的日誌。
考慮以下事項表和XML文件:
ITEMS
Item_Id Name Price
1 Coke 5.00
2 Pepsi 3.00
3 Sprite 2.00
ITEMS.XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<Item>
<Id>5</Id>
<Name>Mountain Dew</Name>
<Price>4.50</Price>
</Item>
<Item>
<Id>3</Id>
<Name>Sprite Zero</Name>
<Price>1.75</Price>
</Item>
導入後,項目表應該如:
ITEMS
Item_Id Name Price
1 Coke 5.00
2 Pepsi 3.00
3 Sprite Zero 1.75
5 Mountain Dew 4.50
一旦這樣做了,我也需要生成包含已插入到表(ITEMS_LOG.XML)「新」記錄一個XML格式的日誌文件:
ITEMS_LOG.XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<Item>
<Id>5</Id>
<Name>Mountain Dew</Name>
<Price>4.50</Price>
</Item>
我曾嘗試使用SQLXMLBulkLoad實現這一點,但遺憾的是它不提供我需要的日誌記錄,也不允許我訪問從SQL Server返回的任何消息(即,什麼被插入/更新)。儘管我擁有SQL專業知識的中級水平,但對於使用XML來說,我相當新,特別是在這種情況下。任何幫助/指導將不勝感激!
工作示例你在哪裏卡住了?你可以發送一些你的代碼嗎? – Zaki
你確定在2個不同的'items.xml'文件中,如果一個產品在數據庫中已經是重複的(通過名稱/價格)1,它將具有相同的ID? – ChrisW
@ChrisW不,他們不一定會有相同的ID。有可能擁有兩個不同ID的相同物品。 – TelJanini