2012-08-24 30 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