Вопрос

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

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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top