在Select语句中使用Stored过程的结果

时间:2010-10-07 05:25:46

标签: sql sql-server stored-procedures sql-server-2005

我有一个返回Dataset(Table)的存储过程。如何在SELECT语句中使用此存储过程的结果?

我需要这样的东西

SELECT T1.* 
FROM Dummy T0
     INNER JOIN
     (EXEC [dbo].[SPGetResults] '900',300,'USD') T1 
     ON T1.aKey=T0.aKey

我正在使用SQL Server 2005

5 个答案:

答案 0 :(得分:2)

我主要同意Marcelo,但是如果您开始使用存储过程,或者您的存储过程执行任何影响数据的操作,您可以创建一个#temp表,其中包含存储过程输出的结构,然后执行类似

的操作
INSERT INTO #temp
EXEC [dbo].[SPGetResults] '900',300,'USD'

然后在临时表上进行连接和选择。

答案 1 :(得分:1)

改为创建一个表值用户定义的函数。

答案 2 :(得分:1)

Marcelo Cantos的答案是最好的。 此外,对于分布式查询,您可以使用以下脚本:

USE [master]

sp_configure 'Ad Hoc Distributed Queries', 1
RECONFIGURE

USE [YourDB]

SELECT *
FROM OPENROWSET('SQLNCLI', 'Server=YourServer ;Trusted_Connection=yes;',
    'EXEC YourDB.YourSchema.YourSP ''YourParameters1'', YourParameters2') AS c
INNER JOIN YourTableOrView ap ON ap.YourPK = c.YourFK

http://www.kodyaz.com/articles/how-to-sql-select-from-stored-procedure-using-openquery-openrowset.aspx

答案 3 :(得分:0)

使用插入...执行并将结果存储到临时表中...然后您可以在选择语句中加入临时表。

或者如前所述,尝试将SP转换为表值函数。

此链接为您提供了更多选项... http://www.sommarskog.se/share_data.html

答案 4 :(得分:0)

以下是表值用户定义函数的简单示例:

create function personSidsByLastName(@lastName varchar(20))
returns table
as 
return 
select personSid from Person where lastName like @lastName

select * from PersonAddress pa where pa.personSid in (select personSid from personSidsByLastName('ali'))