2010-11-04 82 views
1

什麼來處理一個存儲過程複雜PARAM的最佳方式?什麼是處理存儲過程中複雜參數的最佳方式?

讓我解釋一下關於帕拉姆所以它清楚是什麼我想在這裏做一個小...

我有一個項目管理應用程序 - 所以我有事情,比如發佈,項目和里程碑。 一個項目有一個釋放,釋放有其里程碑。

我加入的報告和需要生成一個報告,使用戶可以選擇任意數量的釋放以及釋放的任何里程碑。這將生成一份報告,顯示所有屬於該版本的項目及其所選里程碑的數據。

因爲每個版本都有多個里程碑(里程碑表),以保持在什麼版本中選擇了什麼里程碑的關聯,我想這樣將昏迷分隔列表傳遞給SQL。

release1 | m2,m3,m4 release2 | m2,m7 release3 | M5

爲VARCHAR或許XML ...

什麼像這樣具有內置帕拉姆關係數據在發送的東西最好的做法?我是否一直在思考問題?

請告訴我有一個簡單的解決方案我沒有看到...

+0

我的工作正是這種類型的問題。我的解決辦法是使2個SP電話 - 一個用於存儲主數據的第二到關係數據存儲在一個單獨的表與一個呼叫的每一行。這隻適用於我的情況,因爲交易不需要是原子的,因爲在保存之前已經知道PK。 – pitx3 2010-11-04 17:01:31

回答

1

XML將是最好的方式,用的代碼量最少最簡單的一種...見下面的樣本。

出任首發樣本:今天

DECLARE @Param XML 
SET @Param = ' 
<chriteria> 
     <release id="1"> 
      <milestone id="1" /> 
      <milestone id="2" /> 
      <milestone id="3" /> 
     </release> 
     <release id="2"> 
      <milestone id="1" /> 
      <milestone id="2" /> 
     </release> 
</chriteria> 
' 

SELECT c.value('../@id', 'INT') AS ReleaseId, c.value('@id', 'INT') AS MilestoneId 
FROM @Param.nodes('/chriteria/release/milestone') AS T(c) 
0

SQL Server 2008中已經表值參數來解決眼前這個問題。對於SQL Server 2005,您必須傳入一個字符串才能在Stored Proc中解析,或讓您的調用者和Stored Proc使用某個共享(或臨時)表來保存要處理的數據。

相關問題