猿问

将存储过程的结果插入临时表

将存储过程的结果插入临时表

我该怎么办SELECT * INTO [temp table] FROM [stored procedure]?不FROM [Table],没有定义[temp table]

Select所有数据都可以BusinessLine正常tmpBusLine工作。

select *into tmpBusLinefrom BusinessLine

我尝试相同,但使用stored procedure返回数据,并不完全相同。

select *into tmpBusLinefromexec getBusinessLineHistory '16 Mar 2009'

输出消息:

消息156,级别15,状态1,行2关键字'exec'附近的语法不正确。

我已经阅读了几个创建一个与输出存储过程结构相同的临时表的例子,它工作正常,但不提供任何列会很好。


慕田峪4524236
浏览 2710回答 4
4回答

撒科打诨

你可以使用OPENROWSET。看一看。我还包括sp_configure代码以启用Ad Hoc Distributed Queries,以防它尚未启用。CREATE PROC getBusinessLineHistoryASBEGIN    SELECT * FROM sys.databasesENDGOsp_configure 'Show Advanced Options', 1GORECONFIGUREGOsp_configure 'Ad Hoc Distributed Queries', 1GORECONFIGUREGOSELECT * INTO #MyTempTable FROM OPENROWSET('SQLNCLI', 'Server=(local)\SQL2008;Trusted_Connection=yes;',     'EXEC getBusinessLineHistory')SELECT * FROM #MyTempTable

跃然一笑

如果要在不先声明临时表的情况下执行此操作,可以尝试创建用户定义的函数而不是存储过程,并使该用户定义的函数返回表。或者,如果您想使用存储过程,请尝试以下方法:CREATE TABLE #tmpBus(    COL1 INT,    COL2 INT)INSERT INTO #tmpBusExec SpGetRecords 'Params'

素胚勾勒不出你

这是对您的问题的略微修改版本的答案。如果您可以放弃对用户定义函数使用存储过程,则可以使用内联表值用户定义函数。这本质上是一个存储过程(将采用参数),它返回一个表作为结果集; 因此将很好地与INTO声明。这是一篇关于它和其他用户定义函数的快速文章。如果仍然需要存储过程,则可以使用存储过程包装内联表值用户定义函数。当存储过程从内联表值用户定义函数调用select *时,它只传递参数。因此,例如,您将拥有一个内联表值用户定义函数来获取特定区域的客户列表:CREATE FUNCTION CustomersByRegion  (       @RegionID int   )RETURNS TABLE ASRETURN    SELECT *   FROM customers  WHERE RegionID = @RegionID GO然后,您可以调用此函数来获得结果:SELECT * FROM CustomersbyRegion(1)或者做一个SELECT INTO:SELECT * INTO CustList FROM CustomersbyRegion(1)如果您仍需要存储过程,则将函数包装为:CREATE PROCEDURE uspCustomersByRegion  (       @regionID int   )ASBEGIN      SELECT * FROM CustomersbyRegion(@regionID);ENDGO我认为这是获得预期结果的最“无懈怠”的方法。它使用现有的功能,因为它们的使用目的没有额外的复杂性。通过在存储过程中嵌套内联表值的用户定义函数,您可以通过两种方式访问该功能。加!实际的SQL代码只有一个维护点。已经建议使用OPENROWSET,但这不是OPENROWSET函数的用途(来自联机丛书):包括从OLE DB数据源访问远程数据所需的所有连接信息。此方法是访问链接服务器中的表的替代方法,是使用OLE DB连接和访问远程数据的一次性临时方法。要更频繁地引用OLE DB数据源,请改用链接服务器。使用OPENROWSET将完成工作,但是它会产生一些额外的开销,用于打开本地连接和编组数据。它也可能不是所有情况下的选项,因为它需要临时查询许可,这会带来安全风险,因此可能不是所希望的。此外,OPENROWSET方法将排除使用返回多个结果集的存储过程。在单个存储过程中包装多个内联表值用户定义函数可以实现此目的。
随时随地看视频慕课网APP

相关分类

MySQL
我要回答