Как передать параметры в табличную функцию
-
22-07-2019 - |
Вопрос
Я хочу сделать что-то вроде
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)
ИЗМЕНИТЬ
Основываясь на опыте Кристофа, я обновил этот пример, если вы пытаетесь получить несколько значений, которые вы, например, можете сделать:
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)
Не связан с StackOverflow