Pregunta

Quiero hacer algo como

select * from tvfHello(@param) where @param in (Select ID from Users)
¿Fue útil?

Solución

Debe utilizar CROSS APPLY para lograr esto

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

Otros consejos

Lo siguiente funciona en la base de datos 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)

EDITAR

Basado en la experiencia de Kristof, he actualizado esta muestra si intenta obtener múltiples valores que podría hacer, por ejemplo:

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

Eso me parece bien, excepto que siempre debe prefijar sus funciones con su esquema (generalmente dbo). Entonces la consulta debería ser:

SELECT * FROM dbo.tvfHello(@param) WHERE @param IN (SELECT ID FROM Users)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top