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