Как передать параметры в табличную функцию - PullRequest
23 голосов
/ 03 декабря 2008

Я хочу сделать что-то вроде

select * from tvfHello(@param) where @param in (Select ID from Users)

Ответы [ 3 ]

37 голосов
/ 03 декабря 2008

Вам нужно использовать CROSS APPLY , чтобы достичь этого

select 
    f.* 
from 
    users u
    cross apply dbo.tvfHello(u.ID) f
4 голосов
/ 03 декабря 2008

Следующие работы в базе данных 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)

EDIT

Основываясь на опыте Кристофа, я обновил этот пример, если вы пытаетесь получить несколько значений, которые вы, например, можете сделать:

select * 
from HumanResources.Employee e
CROSS APPLY  EmployeeById(e.EmployeeId)
WHERE e.EmployeeId in (5,6,7,8)
0 голосов
/ 03 декабря 2008

Это выглядит нормально для меня, за исключением того, что вы всегда должны ставить перед вашими функциями свои схемы (обычно dbo) Таким образом, запрос должен быть:

SELECT * FROM dbo.tvfHello(@param) WHERE @param IN (SELECT ID FROM Users)
...