這裏就是我想要做一個SQL Server過程中:的SQL Server/2在同一個存儲過程選擇
@ID1 int
select ID2 from TableA where ID1 = @ID1
(for each selected @ID2)
select * from TableB where ID2 = @ID2
任何想法?
這裏就是我想要做一個SQL Server過程中:的SQL Server/2在同一個存儲過程選擇
@ID1 int
select ID2 from TableA where ID1 = @ID1
(for each selected @ID2)
select * from TableB where ID2 = @ID2
任何想法?
,可以在單個語句來完成:
SELECT b.*
FROM TABLE_B b
JOIN TABLE_A a ON a.id2 = b.id2
WHERE a.id1 = @ID1
但這意味着會有重複,如果在TABLE_A多個記錄涉及表-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)
IN子句是等效的,但EXISTS會更快,如果有重複:
SELECT b.*
FROM TABLE_B b
WHERE b.id2 IN (SELECT a.id2
FROM TABLE_A a
WHERE a.id1 = @ID1)
和A.ID1 = @ ID1 ... – Jonathan 2010-08-06 18:20:09
試試這個:
select * from TableB b where exists (select top 1 * from TableA a where a.ID2 = b.ID2)
SELECT *
FROM TableB
WHERE ID2 IN (SELECT ID2 FROM TableA WHERE ID1 = @ID1)
一般而言,你不想在SQL Server中進行任何類型的循環。嘗試使用「基於集合」的操作。
如果您發佈代碼或XML,**請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼」按鈕(101 010)以良好地格式化並語法突出顯示它! – 2010-08-06 18:21:06
SQL的格式很爛,所以我不打擾它。如果它真的讓你煩惱,你可以自由編輯帖子。 – StingyJack 2010-08-06 18:28:30
對於每個無法在sql中工作,您必須使用遊標。
declare @id int
declare @id2 int
declare mycursor cursor for
select id2 from tablea where [email protected]
open mycursor
fetch next from mycursor into @id2
while @@fetch_status = 0
begin
your code here
fetch next from mycursor into @id2
end
close mycursor
deallocate mycursor
遊標是邪惡的! – Jonathan 2010-08-06 18:21:07
如果您發佈的是代碼或XML,請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼」按鈕(101 010),以良好地格式化和語法突出顯示它! – 2010-08-06 18:22:46
不,我總是使用它,我從來沒有問題,但是,如果他需要一個單獨的子句,他可以使用存在或連接子句,但遊標和forech做同樣的效果 – elchente23 2010-08-06 18:36:26
什麼是你的表結構和所需的輸出?你究竟在做什麼,在這裏? – AllenG 2010-08-06 18:18:43
你是否想爲TableB中的每個選擇單獨設置一個結果集,或者你還可以返回一個包含所有這些行的結果集? – SqlRyan 2010-08-06 18:18:55
我需要一個結果集。 – asmo 2010-08-06 18:25:27