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

提前感谢您的帮助。

4

1 回答 1

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 tab1.id=@ID )
于 2012-08-24T20:25:59.810 回答