Domanda

Voglio fare qualcosa del genere

select * from tvfHello(@param) where @param in (Select ID from Users)
È stato utile?

Soluzione

Devi usare CROSS APPLY per raggiungere questo obiettivo

select 
    f.* 
from 
    users u
    cross apply dbo.tvfHello(u.ID) f

Altri suggerimenti

Il seguente funziona nel database AdventureWorks:

CREATE FUNCTION dbo.EmployeeByID(@employeeID int)
RETURNS TABLE
AS RETURN
(
    SELECT * FROM HumanResources.Employee WHERE EmployeeID = @employeeID
)
GO


DECLARE @employeeId int

set @employeeId=10

select * from 
EmployeeById(@employeeId) 
WHERE @EmployeeId in (SELECT EmployeeId FROM HumanResources.Employee)

Modifica

Sulla base dell'esperienza Kristof, ho aggiornato questo esempio se, ad esempio, stai cercando di ottenere più valori:

select * 
from HumanResources.Employee e
CROSS APPLY  EmployeeById(e.EmployeeId)
WHERE e.EmployeeId in (5,6,7,8)

Mi sembra giusto, tranne per il fatto che dovresti sempre aggiungere il prefisso alle tue funzioni con il loro schema (di solito dbo). Quindi la query dovrebbe essere:

SELECT * FROM dbo.tvfHello(@param) WHERE @param IN (SELECT ID FROM Users)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top