什么是在存储过程中处理复杂参数的最佳方法?

时间:2010-11-04 16:46:26

标签: sql-server-2005

在存储过程中处理复杂参数的最佳方法是什么?

让我解释一下这个参数,以便明白我在这里要做的事情......

我有一个项目管理应用程序 - 所以我有像发布,项目和里程碑这样的东西。 一个项目只有一个版本,一个版本有其里程碑。

我正在添加报告,需要生成一个报告,允许用户选择任意数量的版本和版本的任何里程碑。这将生成一个报告,显示作为发布的一部分的所有项目及其所选里程碑的数据。

因为每个版本都有多个里程碑(里程碑表),以保持在哪个版本中选择了什么里程碑的关联,我认为这个版本有像这样的昏迷分隔列表将UI数据传递给SQL。

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

作为varchar或者xml ...

最好的做法是发送包含内置于param中的关系数据的类似内容吗?我是不是在思考这个问题?

请告诉我有一个简单的解决方案,我没有看到......

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

SQL Server 2008具有表值参数来解决此问题。对于SQL Server 2005,您必须传入一个字符串以在Stored Proc中解析,或者让调用者和Stored Proc使用一些共享(或临时)表来保存要处理的数据。