在SQL的存储过程中如何如何再次利用其它存储过程所返回的多表集结果?
在我的sqlserver中有那么几个存储过程,如:Pro1、Pro2、Pro3、.......它们都能返回表集结果,在查询窗中执行它们都能看到返回的一个或多个表集。它们之...
在我的sql server中有那么几个存储过程,如:Pro1、Pro2、Pro3、.......
它们都能返回表集结果,在查询窗中执行它们都能看到返回的一个或多个表集。它们之间不同的区别在于有些是返回单表集,有些是返回多表集,有些是直接通过select ..from...返回的,有些是通过选创建一个局部临时表用insert into....execute(......)完成局部临时表的填充,然后再对它进行select ....from....返回。
现在的问题是,我要创建一个或多个存储过程,对这些返回的表结果集进行再次利用,如进行再次select....from.....等。我写了些客户端,VB、VC....都轻易的完成了。但在Sql server就是无法做到,我是一个sql server的初学者,请知道的大师们给于帮助。
1、如何让这些表集结果让我能够from,并且能where。
2、如何区分这些多表集结果中的表。像系统过程[sys].[sp_helplogins]所返回的结果一样,我如何再次利用?
3、我试过用insert into....execute(......)压入到一个临时表中,但不成功,因为有几个存储过程本身就是用的这个语句,面在执行时会报insert into不能嵌套的错误。
谢谢,请尽量回答了易懂一些,我是初学者。
噢,忘了说了,也不要用再原存储过程中设一个游标返回值,这个我试过,不是我想要的,再说,太多的存储过程都要去增加一个游标的可能性不大。 展开
它们都能返回表集结果,在查询窗中执行它们都能看到返回的一个或多个表集。它们之间不同的区别在于有些是返回单表集,有些是返回多表集,有些是直接通过select ..from...返回的,有些是通过选创建一个局部临时表用insert into....execute(......)完成局部临时表的填充,然后再对它进行select ....from....返回。
现在的问题是,我要创建一个或多个存储过程,对这些返回的表结果集进行再次利用,如进行再次select....from.....等。我写了些客户端,VB、VC....都轻易的完成了。但在Sql server就是无法做到,我是一个sql server的初学者,请知道的大师们给于帮助。
1、如何让这些表集结果让我能够from,并且能where。
2、如何区分这些多表集结果中的表。像系统过程[sys].[sp_helplogins]所返回的结果一样,我如何再次利用?
3、我试过用insert into....execute(......)压入到一个临时表中,但不成功,因为有几个存储过程本身就是用的这个语句,面在执行时会报insert into不能嵌套的错误。
谢谢,请尽量回答了易懂一些,我是初学者。
噢,忘了说了,也不要用再原存储过程中设一个游标返回值,这个我试过,不是我想要的,再说,太多的存储过程都要去增加一个游标的可能性不大。 展开
1个回答
展开全部
SQL Server要在存储过程中返回结果集只能通过游标,没有其他方法。
而你所说的“查询窗中执行它们都能看到返回的一个或多个表集”这只是SQL Server提供的查询窗口提供这种功能,而对于其他调用方式来说(比如说在另外的存储过程中调用这个存储过程)都是无法获得你在查询窗口中所看到的数据。你在这些在查询窗口中看到的数据,起始并不是存储过程的输出:存储过程只能通过output参数输出资料,要输出结果集只能通过游标输出。
而你所说的“查询窗中执行它们都能看到返回的一个或多个表集”这只是SQL Server提供的查询窗口提供这种功能,而对于其他调用方式来说(比如说在另外的存储过程中调用这个存储过程)都是无法获得你在查询窗口中所看到的数据。你在这些在查询窗口中看到的数据,起始并不是存储过程的输出:存储过程只能通过output参数输出资料,要输出结果集只能通过游标输出。
更多追问追答
追问
那我有一点想不通,有很多系统存储过程都是带表集结果的,难道这些过程的存在只是为了让server外调用,而不可以在server内调用?更何况我可以通过insert into....execute(......)将那些没有用过insert into....execute(......)的表集结果压入一个临时表,说明一个存储过程所返回的表集结果是可以在server内拿到并再利用的。
追答
你的insert into .. execute(...)究竟是怎么写的? 感觉你的代码有些混乱。
将数据压入临时表在存储过程中直接使用语句"insert into 临时表 ..."就可以了,因为存储过程中临时表也是可见的,根本无需在调用存储过程的外面使用insert into。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询