在存储过程中处理复杂参数的最佳方法是什么?
让我解释一下这个参数,以便明白我在这里要做的事情......
我有一个项目管理应用程序 - 所以我有像发布,项目和里程碑这样的东西。 一个项目只有一个版本,一个版本有其里程碑。
我正在添加报告,需要生成一个报告,允许用户选择任意数量的版本和版本的任何里程碑。这将生成一个报告,显示作为发布的一部分的所有项目及其所选里程碑的数据。
因为每个版本都有多个里程碑(里程碑表),以保持在哪个版本中选择了什么里程碑的关联,我认为这个版本有像这样的昏迷分隔列表将UI数据传递给SQL。
release1 | m2,m3,m4 release2 | m2,m7 release3 | M5
作为varchar或者xml ...
最好的做法是发送包含内置于param中的关系数据的类似内容吗?我是不是在思考这个问题?
请告诉我有一个简单的解决方案,我没有看到......
答案 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使用一些共享(或临时)表来保存要处理的数据。