5

我有两个程序 - 两个巨大的选择集,带有几个子选择和联合。我需要合并这些程序的结果,我仍然需要它们单独存在。

像这样的东西:

if @Param = 1 Then 
    PROCEDURE1
if @Param = 2 THEN 
    PROCEDURE2
if @Param = 3 Then
    PROCEDURE1 union PROCEDURE2

我读到不可能对过程进行联合,而且我不能使用临时表。

任何想法?

4

4 回答 4

7

您可以将过程转换为视图。

或者

您可以将这些过程执行到一个临时表中,然后将另一个过程执行到同一个临时表中:

create table #sometable (table definition here)

if @Param = 1 or @Param = 3 begin
    insert #sometable exec PROCEDURE1
end

if @Param = 2 or @Param = 3 begin
    insert #sometable exec PROCEDURE2
end

select * from #sometable
于 2010-01-09T18:29:15.850 回答
3

您可以:

1)将数据插入临时表,然后从中选择:

--Define #t here, with correct schema to match results returned by each sproc
INSERT #t EXECUTE PROC1
INSERT #t EXECUTE PROC2
SELECT * FROM #t

2) 只需从 sproc 返回 2 个结果集,让您的调用代码处理 2 个结果集

于 2010-01-09T18:29:54.797 回答
2

有多种方法可以处理这种情况:

  1. 表值用户定义函数 (UDF)
  2. 意见
  3. 动态 SQL
  4. 临时表

这个问题缺乏具体的细节,所以很难推荐一个,更不用说提供一个量身定制的答案了。逻辑可以在单个查询中执行是合理的。

于 2010-01-09T18:58:53.257 回答
1

如果不使用临时表,我只能想到另外两种方法。

  1. 如果可能,将 s'procs 转换为视图。

  2. 将要调用哪个 proc 的逻辑移至您的应用程序(如果存在)。让它分别运行每个过程并组合结果。

于 2010-01-09T18:48:12.390 回答