【发布时间】:2013-08-13 21:52:02
【问题描述】:
场景:
我需要从存储过程返回单个结果集,但是我有一个可以传递未知多个值的数组参数,并且对于传递的每个值,我需要有一个单独的获取数据的逻辑。
SP:
PROCEDURE [dbo].[GetRecommendations]
(
@RecommendationTypesCSV varchar(4000) -- This could have Type1,Type2,Type3...
}
BEGIN
....
END
一旦我转换了这个逗号分隔的类型,我需要遍历每个类型并执行一些逻辑,但是当我继续执行所需的逻辑时,我收集数据,最后我必须做一个 Union All 并返回所有结果作为一个带有新类型列的大型结果集,并为其分配了相关类型信息。
If (type1)
BEGIN
-- Do Something
END
If (type2)
BEGIN
-- Do Something
END
If (type3)
BEGIN
-- Do Something
END
合并所有三个并返回结果:
Column1 Column2 Column3
----------- ----------- -------
102570 10027 type1
102569 20011 type1
102568 20011 type1
102564 20011 type2
102563 20011 type2
102562 20074 type3
102561 20011 type3
102560 20011 type3
102559 10059 type3
102558 20011 type3
问题:
我需要决定是应该对 DB (SQL) 进行一次调用还是对每种类型进行多次调用,然后将这些类型合并到代码中 (C# .Net),请记住这是面向 WCF 客户端的服务和性能是一个巨大的决策因素,而且类型不仅限于 3 种类型,还可以是更多类型。
如果进行单个 DB 调用的效率是 cursor 循环遍历类型并合并它们的唯一可能方法 - 示例将不胜感激。
【问题讨论】:
-
我手头没有代码,但我过去使用的一种有效方法确实涉及传递 CSV,然后将其填充到可与 JOIN 一起使用的临时表中声明。