2012-08-24 68 views
0

我是新來這個存儲過程的業務,我相信這是直截了當的只是不熟悉的語法或如何返回。從存儲過程中的參數中選擇兩個表

我傳入一個參數ID,我想返回有關該ID的信息,但它可能來自兩個表中的一個。取決於表格取決於我返回的列。

ALTER PROCEDURE name 
@ID varchar (40) 
AS 

BEGIN 
    SET NOCOUNT ON; 
    DECLARE @result int 

IF exists (SELECT id, name, state 
    FROM tab1 
    WHERE tab1.id = @ID 
) 
    begin 
    /* return somehow, maybe as a temp table from previous check */ 
end 
else (SELECT id, name, country, state  
    FROM tab2 
    WHERE tab2.id = @ID 
) 
begin 
    /* return information from tab2 instead */ 
end 
end 
go 

檢查它們是否存在於表中最好的方式,還是應該真的是一個連接?我的SQL技能是新的,我不確定存儲過程中有什麼可用的。

我是如何返回信息的? 我的java訪問它期待這個作爲這個過程中的第二個結果集。 (不,我沒有找出第一個結果集)第一個結果集將大致相同,檢查存儲在不同數據庫中的兩個表之間的差異,但會涉及更多,我只是希望這個結果集第一個工作。

在此先感謝您的幫助。

+0

如果兩張表中出現相同的ID,你會怎麼做? –

+0

這兩個表中的ID應該是唯一的。其中一個將是國家和其他國際人士。通過重複select語句,我可以很好地工作,但是這不會使時間「加倍」,並且將它存儲爲臨時文件不會更快嗎?所以 'INTO#tmpNA',然後用'SELECT * FROM #tmp NA'檢索 – bbotz

+0

不需要臨時表。它會增加一個額外的步驟並會減慢查詢。 – ClearLogic

回答

0

如果你從這兩個表中返回相同的列,你可以這樣做。來自table2的數據只有在table1中不存在時纔會被選中。

ALTER PROCEDURE name 
@ID varchar (40) 
AS 

BEGIN 
    SET NOCOUNT ON; 
    DECLARE @result int 

SELECT id, name, state , country FROM tab1 WHERE tab1.id = @ID 
UNION ALL 
SELECT id, name,state , country FROM tab2 WHERE tab2.id = @ID 
    AND NOT EXISTS(SELECT 1 FROM tab1 WHERE [email protected]) 
+0

_取決於表取決於我返回哪些列。他們不會是同一列謝謝你。 – bbotz