2016-06-14 45 views
0

我有一个进程中,我需要根据条件来执行4个不同的查询,如果从第一次查询的结果为0,那么就应该执行第二个查询等 我使用@@行数找到的行数,然后传递值。这里是我的代码:多个特效的执行

ALTER PROCEDURE FetchingValues @StartLocation Varchar(200),@EndLocation Varchar(200) 

AS 

DECLARE 
     @Count NUMERIC 

BEGIN 
if @@ROWCOUNT=0 
BEGIN 
      select DISTINCT TOP 1 t1.Train_No,Max(t1.Distance) as TotalDistance,0 as Waiting_Time 
      from Rail t1 
      where t1.Source_Station_Name Like @StartLocation+'%' 
      and t1.Destination_Station_Name Like @EndLocation+'%' 
      GROUP BY t1.Train_No 
      Order BY TotalDistance ASC 
    SET @Count= (SELECT @@ROWCOUNT) 
    SELECT @@ROWCOUNT 
END 
ELSE if @Count <> 1 
BEGIN 
EXEC Connection1 @StartLocation,@EndLocation 
SET @Count=(SELECT @@ROWCOUNT) 
SELECT @@ROWCOUNT 
END 
ELSE if @Count <> 1 
BEGIN 
EXEC Connection2 @StartLocation,@EndLocation 
SET @Count=(SELECT @@ROWCOUNT) 
SELECT @@ROWCOUNT 
END 
ELSE 
BEGIN 
select DISTINCT TOP 1 (t1.Train_No+','+ t2.Train_No+','+t3.Train_No+','+t4.Train_No) as TrainSeq, 
Max(t1.Distance)+Max(t2.Distance)+Max(t3.Distance)+Max(t4.Distance)as TotalDistance 
from Rail t1 
join Rail t2 on (t2.Source_Station_Name=t1.Destination_Station_Name) 
Join Rail t3 on (t3.Source_Station_Name=t2.Destination_Station_Name) 
Join Rail t4 on (t4.Source_Station_Name=t3.Destination_Station_Name) 
where t1.Source_Station_Name Like @StartLocation+'%' 
and t2.Destination_Station_Name Like @EndLocation+'%' 
Group by t1.Train_No,T2.Train_No,t3.Train_No,t4.Train_No 
ORDER BY TotalDistance ASC 
END 

我想通过传递2个值那么我应该在所有的查询服务执行查询,并应得到输出

回答

0

如果需要抑制空的结果集则是只存在一个办法 - insert exec到临时表和检查whethere有什么与否。如果有记录 - 无需运行下一个查询,只需从#中选择。

BEGIN 
    select DISTINCT TOP 1 t1.Train_No,Max(t1.Distance) as TotalDistance,0 as Waiting_Time 
    into #t -- <<<<<< 
    from Rail t1 
    where t1.Source_Station_Name Like @StartLocation+'%' 
    and t1.Destination_Station_Name Like @EndLocation+'%' 
    GROUP BY t1.Train_No 

if not exists(select 1 from #t) 
BEGIN 
    insert #t 
    EXEC Connection1 @StartLocation,@EndLocation 
END 

if not exists(select 1 from #t) 
BEGIN 
    insert #t 
    EXEC Connection2 @StartLocation,@EndLocation 
END 

    if not exists(select 1 from #t) 
    ... 

    /* finally */ 
    select * from #t 
    Order BY TotalDistance ASC 
END 
+0

你能详细说明吗?我没有得到你,或者你可以告诉我怎么去执行它 –

+0

@VivekMoningi更新 –

+0

当我执行它,并通过EXEC停止在连接1的值,但它应该去连接2 –