Sql 如何从[存储过程]中选择[临时表1]=[子选择1],[临时表2]=[子选择2]

Sql 如何从[存储过程]中选择[临时表1]=[子选择1],[临时表2]=[子选择2],sql,tsql,sql-server-2005,stored-procedures,Sql,Tsql,Sql Server 2005,Stored Procedures,我有一个存储过程,它返回两个select,我在报告中使用它们。 第一个选项是要以表格格式显示的数据,第二个选项是要在报告头中显示的元数据,如下所示: CREATE PROCEDURE dbo. GetReport @Input INT AS BEGIN --Get #Metadata -- #Results = f(#Metadata) … compex calculation SELECT * FROM #Result

我有一个存储过程,它返回两个select,我在报告中使用它们。 第一个选项是要以表格格式显示的数据,第二个选项是要在报告头中显示的元数据,如下所示:

CREATE PROCEDURE dbo. GetReport    
@Input INT
AS 
BEGIN          
   --Get #Metadata    
   -- #Results = f(#Metadata) … compex calculation          
   SELECT * FROM #Results    
   SELECT * FROM #Metadata    
END
由于存储过程计算非常密集,我想在夜间为一些常用的存储过程参数准备报告行作为普通数据(在两个表中:PrecalcResults和PrecalcMetadata)。 Lather I将直接选择预先计算的值,或根据参数使用存储过程进行计算

出于维护原因,我希望使用相同的存储过程来计算以下数据: 1.在报告中显示 2.存储在PreCalResults和PrecalcMetadata中(使用的参数)

如果我采用单选存储过程,我将采用以下方法:

由于我有multiselect存储过程,所以我希望使用两个表执行上面的操作。 在.net中,我将执行DataSet.Tables[0]和DataSet.Tables[1]…,但我希望在tsql中执行,以便在日常作业中运行它

这在MS SQL中可能吗


我不得不向自己道歉,从下面的答案我可以看出我不是很清楚。 我想把这个功能实现为纯TSQL

是的,这是可能的


您唯一的潜在问题是
TableAdapter
无法从存储过程中同时提取两个结果集,

请尝试搜索“多个活动记录集”(又称MARS)。您需要使用
NextRecordset
方法从一个记录集移动到下一个记录集。除非它是临时表,否则将找不到它,因为它只存在于server@bluefeet那不是我的经历。。。这可能是数据访问层的问题,或者试图在单独的连接上引用临时表。。。无论select语句的源是临时表还是非临时表,它对客户端都应该是不可见的。如果存储过程中有一个返回数据的临时表,并且将该存储过程添加到DataSet.xsd文件中,则这取决于您如何使用它。我的经验是,它当时不知道temp表,因为它存在于服务器上only@bluefeet啊。。。这是因为VisualStudio走了一条捷径,试图在不实际执行存储过程的情况下确定存储过程的元数据,而这正是临时表引起问题的地方。如果要添加到包含临时表的存储过程的顶部,它将按预期工作。哇,太棒了,我没意识到。我需要在未来的项目中牢记这一点。