EJC*_*EJC 11 sql sql-server syntax stored-procedures sql-server-2005
我需要一个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
Run Code Online (Sandbox Code Playgroud)
如何用我的SP返回@ myTable1和@ myTable2?这种语法是否正确?
道歉,我还是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
Run Code Online (Sandbox Code Playgroud)
如果我突出显示并运行代码,直到第二个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)
Run Code Online (Sandbox Code Playgroud)
Jon*_*nna 20
你几乎只选择两个结果集
SELECT * FROM @myTable1
SELECT * FROM @myTable2
Run Code Online (Sandbox Code Playgroud)
但是,有些工具会隐藏一些结果(例如pgAdmin只会显示最后一个),而某些工具有一些要求进入下一个结果集(例如,.NET的IDataReader将不允许你Read()从第二个结果集开始直到你调用NextResult()) .
编辑:
在这种情况下的另一种选择,因为两个结果的类型匹配,是将它们组合成一个结果集:
SELECT field0, field1 from @myTable1
UNION
SELECT field0, field3 from @myTable2
Run Code Online (Sandbox Code Playgroud)
您也可以选择UNION ALL或UNION DISTINCT(默认值),后者只发送不重复的行.
在存储过程结束时,放入:
SELECT * FROM @myTable1
SELECT * FROM @myTable2
Run Code Online (Sandbox Code Playgroud)
这将返回2个结果集.
| 归档时间: |
|
| 查看次数: |
40182 次 |
| 最近记录: |