SQL Server/2在相同的存储过程中选择

asm*_*smo 0 sql t-sql sql-server stored-procedures

这是我在单个SQL Server过程中尝试做的事情:

@ID1 int

select ID2 from TableA where ID1 = @ID1

(for each selected @ID2)
    select * from TableB where ID2 = @ID2
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

OMG*_*ies 10

这可以在一个声明中完成:

SELECT b.*
  FROM TABLE_B b
  JOIN TABLE_A a ON a.id2 = b.id2
 WHERE a.id1 = @ID1
Run Code Online (Sandbox Code Playgroud)

但这意味着如果TABLE_A中的多个记录与TABLE_B记录相关,则会出现重复.在这种情况下,使用EXISTS而不是将DISTINCT添加到上一个查询:

SELECT b.*
  FROM TABLE_B b
 WHERE EXISTS(SELECT NULL
                FROM TABLE_A a
               WHERE a.id2 = b.id2
                 AND a.id1 = @ID1)
Run Code Online (Sandbox Code Playgroud)

IN子句是等效的,但如果有重复项,则EXISTS会更快:

SELECT b.*
  FROM TABLE_B b
 WHERE b.id2 IN (SELECT a.id2
                   FROM TABLE_A a
                  WHERE a.id1 = @ID1)
Run Code Online (Sandbox Code Playgroud)