我有一个返回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
答案 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
答案 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'))