0
A
回答
2
您需要使用INSERT ... EXEC存储数据从SP到表或表变量。然后你可以加入。
说出SP返回一个表(INT,B为varchar(10),C DATETIME)
declare @temp table (a int, b varchar(10), c datetime)
;
insert @temp
exec myproc 1, 10, 'abcdef'
;
select *
from @temp t join othertable o on ... etc
,而无需创建一个临时表时,如果还排除表变量,那么唯一的选择 - 提供SP不采取任何参数,是使用OPENQUERY来运行SP来返回表。伪:
select *
from OPENQUERY(local_server, 'spname_no_params') t
join othertable o on ... etc
0
不,这是不可能的。你可以做的就是将该SP的输出放入一个临时表中,并将它用于你的连接语句。
2
您不能直接加入存储过程。因此,您需要使用Richard的答案中的方法,或者您可以将sproc转换为表值函数。
例如
CREATE FUNCTION dbo.fxnExample(@Something INTEGER)
RETURNS TABLE
AS
RETURN
(
SELECT A, B
FROM MyTable
WHERE Something = @Something
)
,你再使用/在这样的查询JOIN上:
SELECT t1.Foo, f.A, f.B
FROM Table1 t1
JOIN dbo.fxnExample(1) f ON t1.A = f.A
的一点要注意的是,你不能做一个用户自定义函数的一切,你可以在一个存储过程等等取决于你的sproc做什么,这可能是不可能的。此外,为了获得最佳性能,您应该将其作为上面示例中的内联表值函数。另一种方法是多语句表值函数,由于执行计划产生的方式会基于假设它返回的行数非常低(即1),因此可能会给您带来糟糕的性能 - 因此如果它返回的行数较多,则性能可能很差。
这里的好就可以了MSDN文章:http://blogs.msdn.com/b/psssql/archive/2010/10/28/query-performance-and-multi-statement-table-valued-functions.aspx
相关问题
- 1. SQL-服务器:从存储过程
- 2. SQL服务器存储过程文档
- 3. SQL服务器:递归存储过程
- 4. JPA -SQL服务器存储过程?
- 5. 存储过程..使用SQL服务器
- 6. 存储过程SQL服务器
- 7. SQL服务器 - 从存储过程
- 8. SQL服务器 - 存储过程
- 9. SQL CLR存储过程和Web服务
- 10. SQL服务器 - 通过服务器和数据库存储过程
- 11. 程序和存储过程sql服务器之间的区别?
- 12. MySQL服务器存储过程AUTO_INCREMENT UNIQUE
- 13. SQL Server - 通过SQL服务器代理存储/保存DateDIFF
- 14. 如何从存储过程SQL 2008服务器得到空值
- 15. 在MS SQL服务器2008中调试存储过程
- 16. SQL服务器存储过程返回一个表
- 17. 调用更新SQL链接服务器中的存储过程?
- 18. SQL服务器脚本generater存储过程
- 19. Sql服务器返回选择存储过程中的行数
- 20. SQL服务器:每一个存储过程
- 21. 为存储过程创建sql服务器角色
- 22. 动态存储过程在不同的SQL服务器中?
- 23. 解析XML文档SQL服务器内存储的过程
- 24. SQL服务器:问题与变量和存储过程
- 25. SQL Server 2008 R2 - 对链接服务器运行存储过程
- 26. SQL服务器游标数据存储过程
- 27. 使用PHP的存储过程SQL服务器的问题
- 28. SQL服务器:在存储过程中的并发性问题
- 29. 存储过程,如果还有SQL服务器2008
- 30. SQL服务器存储过程不返回值
我能加入,而无需创建临时表? – Rauf 2011-03-28 09:01:54
不要这样想。 – 2011-03-28 09:02:41
@Rauf - 更新回答 – RichardTheKiwi 2011-03-28 09:04:43