2011-01-05 153 views
0

我有instanse测试1和测试2两个存储过程,并使用相同的参数X.参加另一个存储过程2的存储过程

X是一部分的,如果在这两个存储过程的声明,基本上它告诉选择语句选择的过程。 (这应该不重要,因为它是一个参数,但我不知道)

我想要test1和test2加入列名称,因为他们都将有列名称,我希望他们并排链接没有一个在另一个之下,这是可能的,以及如何

基本上,我想加入这2存储过程在另一个存储过程,我的asp.net程序将调用。

这是存储过程(sp_current)

@mode varchar(20) 




AS 
SET NOCOUNT ON 

Declare @Booked Int 
Set @Booked = CONVERT(int,DateAdd(year, (year(getdate())) - Year(getdate() + 1),     
       DateAdd(day, DateDiff(day, 1, getdate()), 1))) 

If @mode = 'Sales' 
     Select 
      Division, 
      SDESCR, 
      DYYYY, 

     Sum(Case When Booked <= @Booked Then NetAmount End) currentNetSales,  
     Sum(Case When Booked <= @Booked Then PARTY End) AS currentPAX   



     From dbo.B101BookingsDetails 
     Where DYYYY = (year(getdate())) 
     Group By SDESCR, DYYYY, Division   
     Order By Division, SDESCR, DYYYY 

else if @mode = 'netsales' 

Select Division, 
     SDESCR,   
     DYYYY, 


     Sum(Case When Booked <= @Booked Then NetAmount End) currentNetSales,   


     Sum(Case When Booked <= @Booked Then PARTY End) AS currentPAX  



From dbo.B101BookingsDetails 
Where DYYYY = (year(getdate())) 
Group By SDESCR, DYYYY, Division 
Order By Division, SDESCR, DYYYY 

Else if @mode = 'Inssales' 

Select Division, 
     SDESCR,   
     DYYYY, 

     Sum(Case When Booked <= @Booked Then InsAmount End) currentInsSales,   

     Sum(Case When Booked <= @Booked Then PARTY End) AS currentPAX   

From dbo.B101BookingsDetails 
Where DYYYY = (year(getdate())) 
Group By SDESCR, DYYYY, Division 
Order By Division, SDESCR, DYYYY 

Else if @mode = 'CXsales' 
Select Division, 
     SDESCR,   
     DYYYY, 

     Sum(Case When Booked <= @Booked Then CancelRevenue End) currentCXSales,   


     Sum(Case When Booked <= @Booked Then PARTY End) AS currentPAX   


From dbo.B101BookingsDetails 
Where DYYYY = (year(getdate())) 
Group By SDESCR, DYYYY, Division 
Order By Division, SDESCR, DYYYY 

Else if @mode = 'othersales' 
Select Division, 
     SDESCR,   
     DYYYY, 

    Sum(Case When Booked <= @Booked Then OtherAmount End) currentOtherSales,   
     Sum(Case When Booked <= @Booked Then PARTY End) AS currentPAX   



From dbo.B101BookingsDetails 
Where DYYYY = (year(getdate())) 
Group By SDESCR, DYYYY, Division 
Order By Division, SDESCR, DYYYY 

Else if @mode = 'cxvalue' 
Select Division, 
     SDESCR,   
     DYYYY, 

     Sum(Case When Booked <= @Booked Then CXVALUE End) currentCXValue, 
     Sum(Case When Booked <= @Booked Then PARTY End) AS currentPAX   



From dbo.B101BookingsDetails 
Where DYYYY = (year(getdate())) 
Group By SDESCR, DYYYY, Division 
Order By Division, SDESCR, DYYYY 

和 这是sp_compare

@mode varchar(20), 
@YearToGet int 



AS 
SET NOCOUNT ON 

Declare @Booked Int 
Set @Booked = CONVERT(int,DateAdd(year, @YearToGet - Year(getdate() + 1),     
       DateAdd(day, DateDiff(day, 1, getdate()), 1))) 

If @mode = 'Sales' 
     Select 
      Division, 
      SDESCR, 
      DYYYY, 

     Sum(Case When Booked <= @Booked Then NetAmount End) ASofNetSales,   
     SUM(NetAmount) AS YENetSales, 

     Sum(Case When Booked <= @Booked Then PARTY End) AS ASofPAX,   
     SUM(PARTY) AS YEPAX 


     From dbo.B101BookingsDetails 
     Where DYYYY = @YearToGet 
     Group By SDESCR, DYYYY, Division   
     Order By Division, SDESCR, DYYYY 

else if @mode = 'netsales' 

Select Division, 
     SDESCR,   
     DYYYY, 


     Sum(Case When Booked <= @Booked Then NetAmount End) ASofNetSales,   
     SUM(NetAmount) AS YENetSales, 

     Sum(Case When Booked <= @Booked Then PARTY End) AS ASofPAX,   
     SUM(PARTY) AS YEPAX 


From dbo.B101BookingsDetails 
Where DYYYY = @YearToGet 
Group By SDESCR, DYYYY, Division 
Order By Division, SDESCR, DYYYY 

Else if @mode = 'Inssales' 

Select Division, 
     SDESCR,   
     DYYYY, 

     Sum(Case When Booked <= @Booked Then InsAmount End) ASofInsSales,   
     SUM(InsAmount) AS YEInsSales, 

     Sum(Case When Booked <= @Booked Then PARTY End) AS ASofPAX,   
     SUM(PARTY) AS YEPAX 

From dbo.B101BookingsDetails 
Where DYYYY = @YearToGet 
Group By SDESCR, DYYYY, Division 
Order By Division, SDESCR, DYYYY 

Else if @mode = 'CXsales' 
Select Division, 
     SDESCR,   
     DYYYY, 

     Sum(Case When Booked <= @Booked Then CancelRevenue End) ASofCXSales,   
     SUM(CancelRevenue) AS YECXSales, 


     Sum(Case When Booked <= @Booked Then PARTY End) AS ASofPAX,   
     SUM(PARTY) AS YEPAX 

From dbo.B101BookingsDetails 
Where DYYYY = @YearToGet 
Group By SDESCR, DYYYY, Division 
Order By Division, SDESCR, DYYYY 

Else if @mode = 'othersales' 
Select Division, 
     SDESCR,   
     DYYYY, 

    Sum(Case When Booked <= @Booked Then OtherAmount End) ASofOtherSales,   
     SUM(OtherAmount) AS YEOtherSales, 

     Sum(Case When Booked <= @Booked Then PARTY End) AS ASofPAX,   
     SUM(PARTY) AS YEPAX 


From dbo.B101BookingsDetails 
Where DYYYY = @YearToGet 
Group By SDESCR, DYYYY, Division 
Order By Division, SDESCR, DYYYY 

Else if @mode = 'cxvalue' 
Select Division, 
     SDESCR,   
     DYYYY, 

     Sum(Case When Booked <= @Booked Then CXVALUE End) ASofCXValue, 
     SUM(CXVALUE) AS YECXValue, 


     Sum(Case When Booked <= @Booked Then PARTY End) AS ASofPAX,   
     SUM(PARTY) AS YEPAX 


From dbo.B101BookingsDetails 
Where DYYYY = @YearToGet 
Group By SDESCR, DYYYY, Division 
Order By Division, SDESCR, DYYYY 

我不是想让它一个过程或以某种方式加入他们并排在一个单独的程序

+0

让他们表值函数,而不是存储过程,那么你可以加入他们。可能效率很低,特别是因为它们似乎都使用同一张表。 – 2011-01-05 15:38:07

回答

1

你的问题有点贵。我猜这两个过程returna结果集,你想返回这些结果集的连接。

您可以定义临时表或表变量,并使用

INSERT INTO table_1 exec sp_1 ... 
INSERT INTO table_2 exec sp_2 ... 

比你可以从那些2个临时对象的联接选择。

编辑: 不知道的数据类型,让我尝试类似

create table #tmp1 (
    Division varchar(50), 
    SDESCR varchar850), 
    DYYYY varchar(5), 
    currentNetSales money, 
    currentPax money 
) 

create table #tmp2 (
    Division varchar(50), 
    SDESCR varchar(50), 
    DYYYY varchar(5), 
    ASofNetSales money,   
    YENetSales money, 
    ASofPAX money,   
    YEPAX money 
) 

INSERT INTO #tmp1 exec sp_current ('Sales') 
INSERT INTO #tmp2 exec sp_compare ('Sales', 2009) 

select t1.Division, 
isnull(t1.SDESCR, t2.SDESCR) SDESCR, 
isnull(t1.DYYYY, t2.DYYYY) DYYYY, 
t1.currentNetSales, 
t1.currentPax, 
t2.ASofNetSales money,   
t2.YENetSales money, 
t2.ASofPAX money,   
t2.YEPAX money 
from #tmp1 t1 
    full outer join #tmp2 t2 on t1.Division = t2.Division and t1.SDESCR = t2.SDESCR 
Order By Division, SDESCR 
+0

生病在我的问题上添加更多 – MyHeadHurts 2011-01-05 15:11:42

+0

@MyHeadHurts - 给出bernd_k的回答,可能更值得添加一个例子,例如显示一些可能的样本“这些是来自sp1的行”,“这些是来自sp2的行”,“这就是我想要返回的结果” – 2011-01-05 15:37:34

+0

是的,我认为,而不是在单独的程序中做它们,我要去如果你能帮上忙,那就试试把它们放在一个巨人身上吧。 http://stackoverflow.com/questions/4605912/stored-procedure-issue-has-to-do-with-my-where-clause-and-if-statement – MyHeadHurts 2011-01-05 15:41:15

相关问题