从存储过程中带有参数的两个表中进行选择

时间:2012-08-24 18:11:59

标签: sql sql-server stored-procedures

我是这个存储过程业务的新手,我相信这很简单,只是不熟悉语法或如何返回。

我正在传递参数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访问它期望这是此过程中的第二个结果集。 (不,我没有找到第一个结果集)第一个结果集将大致相同,检查存储在不同数据库中的两个表,但将涉及更多,我只是希望这个首先工作。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果要从两个表中返回相同的列,可以这样做。如果table1中不存在,则表2中的数据将被选中。

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 tab1.id=@ID )