2012-01-19 48 views
0

我已經寫了兩個SQL Server存儲過程SQL存儲過程結合起來的結果

例如:

create PROCEDURE query1 
AS 
SQL code here... 

create PROCEDURE query2 
AS 
SQL code here... 

現在我可以打電話給他們單獨使用下面的命令,返回值以下。

exec query1 

Study availability 
ACR  99.97% 

現在我想這些存儲過程在一杆結合,得到的結果,如:

exec query1 
exec query2 

,並給它的結果類似以下,但不知其現在的工作了給我的語法錯誤。如何合併兩個存儲過程並在一個報告中獲得結果?

這是T-SQL查詢

Study availability 
ACR  99.97% 
FOS  87.88% 
+1

除了語法錯誤之外,還提供了一些代碼,這可能會對讀者的帖子有所幫助 – Dan

+0

什麼是消費這些數據?報告工具,如Crystal Reports? –

回答

1

由於它們都返回相同的列標題/數據類型,我建議將2個單獨的查詢合併到一個查詢中並使用UNION ALL。

EX:

SELECT 'ACR'  AS Study, 
     SomeField AS Availability 
FROM SomeTable1 

UNION ALL 

SELECT 'FOS'  AS Study, 
     SomeField AS Availability 
FROM SomeTable2; 

很難沒有看到實際的存儲過程來給予更具體的建議,但是這是不是有2個獨立的程序肯定更加清晰。希望這可以幫助。

+0

你是100%正確我試過你的代碼,它的工作原理!謝謝!! – Satish

6

你不能打電話給他們,你描述的方式(即高管QUERY1 EXEC QUERY2)。這裏是一個替代假設每個PROC返回一個值:

declare @result as table (
ACR float, 
FOS float 
) 

INSERT INTO @result(ACR) 
exec query1 

INSERT INTO @result(FOS) 
exec query2 

SELECT ACR,FOS from @result 
+0

精彩!!謝謝!! – Satish

+0

我試圖運行你的代碼,並給它提供錯誤不正確的語法在兩倍。我在MS SQL 2008服務器上運行此代碼。 – Satish

+0

@Satish更正了我的答案。我在語法上有錯誤。對於那個很抱歉。 – Icarus

1

你可以試試:

exec query1; exec query2 

但要注意的是,結果沒有合併,你只得到兩個SP作爲的結果單獨的結果集。

+0

在你的語法中,它只是給我第一個查詢的單個結果。看起來像它不執行第二個查詢。我需要單獨的結果。 – Satish

0

它取決於你的代碼,你可以將每個SP的結果插入到一個表中,然後將它們聯合在一起以獲得你正在尋找的單個結果集 - 但是如果它有很多行因爲您正在複製結果而不是將它們流出到客戶端。它破壞了優化器跨越邊界組合事物的能力,因爲它必須將它們寫入臨時表。

如果特效不復雜,我會考慮將它們製作成視圖或內聯表值函數。這些可以通過其他例程(如視圖,函數或過程)輕鬆地組合,並使事情變得更加模塊化。

+0

我試過以下它不起作用exec query1 UNION exec query2 – Satish

+0

@Satish正確的,你不能用procs做到這一點。這就是爲什麼我說你必須將它們輸出到一個表格然後選擇聯合。另外,爲什麼我建議如果可能的話使用其他數據庫結構 - 例如使用表值函數可以這樣做:SELECT * FROM TVF1(params)UNION TVF2(params) –