这是在SQL Server中执行此操作的唯一“简单”方法,而无需使用一些复杂的复杂创建函数或已执行的sql字符串调用,这两种方法都是很糟糕的解决方案:创建一个临时表openrowset您的存储过程数据例:INSERT INTO #YOUR_TEMP_TABLESELECT * FROM OPENROWSET ('SQLOLEDB','Server=(local);TRUSTED_CONNECTION=YES;','set fmtonly off EXEC [ServerName].dbo.[StoredProcedureName] 1,2,3')注意:必须使用“ set fmtonly off”,并且不能在包含存储过程参数的字符串或表名的openrowset调用中向其中添加动态sql。这就是为什么您必须使用临时表而不是表变量的原因,这样做会更好,因为它在大多数情况下会执行临时表。
好的,在吉姆哈克(Jimhark)的鼓励下,这是旧的单个哈希表方法的示例:-CREATE PROCEDURE SP3 asBEGIN SELECT 1, 'Data1' UNION ALL SELECT 2, 'Data2'ENDgoCREATE PROCEDURE SP2 asBEGIN if exists (select * from tempdb.dbo.sysobjects o where o.xtype in ('U') and o.id = object_id(N'tempdb..#tmp1')) INSERT INTO #tmp1 EXEC SP3 else EXEC SP3ENDgoCREATE PROCEDURE SP1 asBEGIN EXEC SP2ENDGO/*--I want some data back from SP3-- Just run the SP1EXEC SP1*//*--I want some data back from SP3 into a table to do something useful--Try run this - get an error - can't nest Execsif exists (select * from tempdb.dbo.sysobjects o where o.xtype in ('U') and o.id = object_id(N'tempdb..#tmp1')) DROP TABLE #tmp1CREATE TABLE #tmp1 (ID INT, Data VARCHAR(20))INSERT INTO #tmp1EXEC SP1*//*--I want some data back from SP3 into a table to do something useful--However, if we run this single hash temp table it is in scope anyway so--no need for the exec insertif exists (select * from tempdb.dbo.sysobjects o where o.xtype in ('U') and o.id = object_id(N'tempdb..#tmp1')) DROP TABLE #tmp1CREATE TABLE #tmp1 (ID INT, Data VARCHAR(20))EXEC SP1SELECT * FROM #tmp1*/