2013-03-20 52 views
0

我有一個簡單的表ID的功能執行多次:不使用循環

ObjectId 
---------- 
100 
101 
102 

我想執行一個功能fn_GetStuff(Id)的多次這樣的:

fn_GetStuff(100) 
fn_GetStuff(101) 
fn_GetStuff(102) 

是否可以在不使用循環的情況下執行此操作?

我想這不工作:

SELECT * 
FROM myTable 
INNER JOIN fn_GetStuff(myTable.ObjectId) 
+1

你需要把模式中功能的前面。這是一項要求。下面有兩種答案,一種是標量函數,另一種是內聯表值函數。其中之一是正確的,但確保在所有情況下追加模式。 – 2013-03-20 15:35:31

+2

這是一個表值函數嗎? – 2013-03-20 15:38:53

+0

是的,它是一個表值函數。 – Arizona1911 2013-03-20 15:40:16

回答

5

OP使用在線表值函數,它看起來像這樣他們就需要一個CROSS APPLY ...

Select * 
From myTable mt 
Cross Apply schema.fn_GetStuff(mt.ObjectID) f 
+0

這個作品謝謝你! – Arizona1911 2013-03-20 15:37:55

1

假設你的函數是一個標量值函數,你可以做:

select fn_GetStuff(Objectid) 
from myTable 

如果你的函數表值,然後您需要使用cross apply

0

您不需要連接,因爲沒有其他表。你應該沒做到這一點:

SELECT fn_GetSTuff(t.ObjectId) 
FROM myTable t