2010-10-06 111 views
11

我需要一個SP來返回多組結果。第二組結果將基於第一組結果的一列。存儲過程返回多個結果集

所以:

declare @myTable1 table(field0 int,field1 varchar(255)) 
insert into @myTable1 select top 1 field0, field1 from table1 

declare @myTable2 table(field0 int,field3 varchar(255)) 
insert into @myTable2 
select field0, field3 from table2 
where @myTable1.field0 = @myTable2.field0 

如何返回@ MYTABLE1和@ myTable2我的SP?這句法甚至是對的嗎?

我的道歉,我仍然在SQL新手...

編輯:

所以,我在下面的代碼的最後一行得到一個錯誤說:「必須聲明標量變量「@ MYTABLE1」」

declare @myTable1 table(field0 int,field1 dateTime) 
insert into @myTable1 
select top 1 field0, field1 
from someTable1 m 
where m.field4 > 6/29/2009 

select * from @myTable1 
select * 
from someTable2 m2 
where m2.field0 = @myTable1.field0 

如果我突出和運行代碼,直到第二select *正常工作...... 時,我強調它的作用,其餘像第一變量不存在...

EDIT2: 想出了這個問題。多謝你們。

declare @myTable1 table(field0 int,field1 dateTime) 
insert into @myTable1 
select top 1 field0, field1 
from someTable1 m 
where m.field4 > 6/29/2009 

select * from @myTable1 
select * 
from someTable2 m2 
where m2.field0 = (select field0 from @myTable1) 
+0

以前應該問過,但您使用的是什麼RDBMS? – JNK 2010-10-06 20:07:56

+0

如果在同一個語句中沒有DECLARE @ Mytable1,它將不起作用。如果只突出顯示最後一部分,則DECLARE不在該查詢中。這些變量僅適用於一個查詢,並且不會持續。 – JNK 2010-10-06 20:16:10

+0

Microsoft SQL Server 2005 – EJC 2010-10-06 20:17:01

回答

20

你幾乎只需選擇兩個結果集

SELECT * FROM @myTable1 
SELECT * FROM @myTable2 

然而,有些工具會隱藏一些結果(如pgAdmin的將只顯示最後一個)和一些工具有某種需要去下一個結果(例如.NET的IDataReader將不允許你從第二個結果集中獲得Read(),直到你調用NextResult())。

編輯:

在這種情況下的一個選擇,因爲該類型的兩個結果相吻合,是將它們組合成一個單一的結果集:

SELECT field0, field1 from @myTable1 
UNION 
SELECT field0, field3 from @myTable2 

您也可以UNION ALLUNION DISTINCT之間進行選擇(默認),後者只會發送不重複的行。

+0

好點!因爲他沒有提及調用應用程序,所以我沒有解決這個問題。 – JNK 2010-10-06 19:35:07

+0

@JNK,大聲笑這正是我*提及它的原因 - 想知道他們爲什麼會遇到問題,我想知道他們是否已經做得很好,但是他們的工具正在把它藏起來。 – 2010-10-06 19:39:28

+0

該查詢的結果將通過C#應用程序的HTML格式發送電子郵件...此方法仍然有效嗎?我沒有深入到調用SP的應用程序,我只知道它可以調用SP來獲得一些結果,然後另一個程序將電子郵件的結果.. – EJC 2010-10-06 19:41:25

4

在存儲過程的結束,就把:

SELECT * FROM @myTable1 
SELECT * FROM @myTable2 

這將返回2個的結果集。

+0

非常好,我會盡快嘗試一下:) – EJC 2010-10-06 19:31:05

+0

請記住,實際上您會得到三個結果集,因爲它看起來像在OP中的代碼末尾有一個選擇。 – JNK 2010-10-06 19:46:06

+0

這是行不通的......我得到一個錯誤消息,「必須聲明標量變量@ myTable1」當做where子句「where @ myTable1.field0 = @ myTable2.field0」有什麼想法? – EJC 2010-10-06 20:04:31

相關問題