TSQL:联合结果来自两个选择(程序?)

时间:2010-01-09 18:25:42

标签: sql sql-server tsql stored-procedures union

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

类似的东西:

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

我读到在程序上建立联合是不可能的,我不能使用临时表。

有什么想法吗?

4 个答案:

答案 0 :(得分:7)

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

OR

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

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

答案 1 :(得分:3)

你可以:

1)将数据插入临时表,然后从中进行SELECT:

--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个结果集

答案 2 :(得分:2)

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

  1. Table-Valued User Defined Functions (UDFs)
  2. 浏览
  3. Dynamic SQL
  4. 临时表
  5. 这个问题缺乏具体细节,所以很难推荐一个在另一个上面,更不用说提供量身定制的答案了。逻辑可以在单个查询中执行,这似乎是合理的。

答案 3 :(得分:1)

如果不使用临时表,我只能想到其他两种方式。

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

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