2010-11-04 145 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使用某个共享(或临时)表来保存要处理的数据。

相关问题