2009-12-23 14 views
6

通過Vs的表值參數Vs的XML到SQL 2008作爲我們工作的一個ASP.NET的項目有三種方式可以更新數據到數據庫時有更新用/插入所需參數從.net應用

多行假設我們需要更新員工的教育細節(這可能是1,3,5或10條)

方法來更新數據

  1. 傳遞值作爲參數(傳統方法),如果10個記錄那麼需要10次往返

  2. 傳遞數據,XML和編寫存儲過程中的邏輯從XML獲得這些數據,並更新表(只需要一個往返)

  3. 使用表值參數(只需要單一往返)

注意:數據以列表形式提供,因此如果需要傳遞,我需要將其轉換爲xml或任何其他格式。

沒有。在整個應用程序的地方,我們需要更新大量的數據(或多個記錄)

我只需要你的建議,

  1. 哪種方法會更快(請註明,如果有一些其他費用)

    與任何方法

  2. 上的數據經過的大小其它任何瓶頸或問題與任何方式(序列化/反序列化的關注或限制的

  3. 可管理性和可測試性的關注G)

  4. 你建議的相同操作

感謝

回答

7

的表值參數的方法的任何其他方法,將最有可能是最好的辦法,因爲你可以更新一整批行立刻;畢竟,你會得到一個,你可以輕鬆地加入。

其他方法都是逐行的,本來就比較慢,或者需要在SQL Server端的東西上進行適當的修改;這通常不僅非常有趣,而且更容易出錯,並且通常只比簡單地加入兩個表的表現要低。

這正是TVP被引入的場景 - 解決「逐行」或「與XML混淆」問題。我相信微軟有一個很好的理由來介紹這一點,如果他們這樣做,你一定要給它一個好的嘗試,看看它是否有效。

但是,這只是一種「直覺」,並不能真正瞭解所有的細節。只有通過測試所有三個選項,您才能真正發現這一點。有很多其他的效果和參數可能會發揮作用,任何人回答都不可能知道....

+0

我們有一個正常的訂單管理解決方案,其中有一個訂單主人和其他訂單明細(產品),地址細節等相同的方式將移動到計費...你可以建議任何可能的問題與表值參數.. 。你覺得在繼續之前我們需要考慮(或者這種方法的任何副作用) – Harryboy 2009-12-23 09:34:13

3

如果使用TVP的,你可以使用MERGE語句來管理插入/更新/刪除。 (酷派SQL2008的新功能)。

,我已經看到了TVP的唯一限制是1000行限制。就像這是沒有任何問題與XML或逐行進行。

我實現逐行和TVP解決方案,爲數據導入我在做(幾千行)。 TVP贏了手(分鐘到秒)。所以我建議你兩個 - 它也會給你的指標,告訴你的老闆,你是如何的酷,通過使東西跑得更快!

事情你需要考慮; 什麼都結束了由行從行轉換爲數據,以TVP或XML的頭部處理器。這是基於你的數據。 (將涉及更多的循環或序列化)

檢查並行性 - 我見過哪些表參數只能運行在一個核心的例子! - 所以在測試中你看到的速度增加,可能不會反映在現場。