2014-04-06 32 views
0

我有這樣一個存儲過程:結合兩個存儲過程,一個存儲過程得到錯誤

ALTER procedure [dbo].[IBS_PodiumSummeryCount] 
    @locid integer = null 
as 
begin 
    SET NOCOUNT ON; 

    SELECT 
     sum(status_receved) as Receved, 
     sum(status_parked) as Parked, 
     sum(status_requested) as Requested, 
     sum(status_requestedinprocess) as Requestinprocess 
    FROM 
     (SELECT 
      CASE WHEN (status = 0) THEN 1 ELSE 0 END AS status_receved, 
      CASE WHEN (status = 2) THEN 1 ELSE 0 END AS status_parked, 
      CASE WHEN (status = 3) THEN 1 ELSE 0 END AS status_requested, 
      CASE WHEN (status = 4) THEN 1 ELSE 0 END AS status_requestedinprocess 
     FROM 
      transaction_tbl 
     WHERE 
      locid = @locid AND dtime >= getdate()-1 AND status IN (0,2,3,4)) a; 

    SELECT 
     l1.StartTime, CONVERT(VARCHAR, GETDATE(), 108) AS Time 
    FROM 
     Location_tbl l1 
    WHERE 
     l1.Locid = @locid 
END 

我還有一個存儲過程是這樣的:

select dbo.podiumsummerytime(
       convert(decimal(10,1), 
        avg(convert(numeric(18,2), datediff(ss, t.dtime, t.PAICdate )))) 

      ) as Avgparkingtime, 
      dbo.podiumsummerytime(
       convert(decimal(10,1), 
        avg(convert(numeric(18,2), datediff(ss, t.Paydate, t.DelDate)))) 

      ) as AvgDelivarytime, 
      dbo.podiumsummerytime(
       convert(decimal(10,1), 
        avg(convert(numeric(18,2), datediff(ss, t.dtime, t.DelDate)))) 

      ) as Avgstaytime 

      from (select top 30 * from transaction_tbl where [email protected] and dtime >= getdate()-2 order by transactID desc) t 
      end 

我試着寫這兩存儲過程在一個與工會,但我得到像這樣的錯誤:

所有使用UNION,INTERSECT或EXCEPT運算符組合的查詢m在目標列表中有相同數量的表達式。

我與SQL Server 2008中的工作,我怎麼能結合這兩種存儲過程轉換成一個存儲過程...

+0

您的第一個存儲過程選擇兩個數據集 - 一個使用** 4 **,另一個使用** 2 **列輸出。第二個存儲過程選擇** 3 **列 - 所以** no **,你不能像這樣組合 - 你必須解決如何返回你的數據** **數據集 –

+0

所以我怎麼樣加入這兩個存儲過程後可以返回一組數據嗎? – user3262364

回答

2

正如錯誤說,UNION是一個特定關鍵字的使用得到了一組包含兩個結果的行。如果行不同,那麼它們不能與UNION連接。

沒有什麼可以阻止你將兩個查詢放在一個存儲過程中,proc將只返回兩個結果集。

例如:

ALTER procedure [dbo].[IBS_PodiumSummeryCount] 
    @locid integer = null 
AS 
BEGIN 
    SELECT * FROM Customers WHERE Location = @Locid; 

    SELECT * FROM Suppliers WHERE Location = @Locid; 
END 

將返回兩個查詢的結果,單獨的結果集。

+0

先生,,有沒有辦法寫這兩個存儲過程,我可以寫在一個存儲過程? – user3262364

+0

只需將查詢選擇到存儲過程的主體中,我就添加了一個示例。 –

+0

在我的情況下,我想要得到三組結果,我可以做到兩個或一個? – user3262364