Ответ 1
Чтобы достичь этого, вам необходимо использовать CROSS APPLY
select
f.*
from
users u
cross apply dbo.tvfHello(u.ID) f
Я хочу сделать что-то вроде
select * from tvfHello(@param) where @param in (Select ID from Users)
Чтобы достичь этого, вам необходимо использовать CROSS APPLY
select
f.*
from
users u
cross apply dbo.tvfHello(u.ID) f
В базе данных 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)
Основываясь на опыте Kristof, я обновил этот пример, если вы пытаетесь получить несколько значений, которые вы могли бы сделать, например:
select *
from HumanResources.Employee e
CROSS APPLY EmployeeById(e.EmployeeId)
WHERE e.EmployeeId in (5,6,7,8)
Это выглядит хорошо для меня, за исключением того, что вы всегда должны префикс своих функций своей схемой (обычно dbo). Таким образом, запрос должен быть:
SELECT * FROM dbo.tvfHello(@param) WHERE @param IN (SELECT ID FROM Users)