Comment passer des paramètres à la fonction de valeur de Table

Je veux faire quelque chose comme

select * from tvfHello(@param) where @param in (Select ID from Users)
21
demandé sur Michał Powaga 2008-12-03 03:14:42

3 réponses

Vous devez utiliser CROSS APPLY pour y parvenir

select 
    f.* 
from 
    users u
    cross apply dbo.tvfHello(u.ID) f
34
répondu kristof 2008-12-03 10:39:59

Les travaux suivants dans la base de données 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)

Modifier

Basé sur Kristof expertise j'ai mis à jour cet exemple si vous essayez d'obtenir plusieurs valeurs, vous pouvez par exemple faire:

select * 
from HumanResources.Employee e
CROSS APPLY  EmployeeById(e.EmployeeId)
WHERE e.EmployeeId in (5,6,7,8)
3
répondu JoshBerke 2008-12-03 15:43:20

Cela me semble correct, sauf que vous devriez toujours préfixer vos fonctions avec leur schéma (généralement dbo). Donc, la requête devrait être:

SELECT * FROM dbo.tvfHello(@param) WHERE @param IN (SELECT ID FROM Users)
0
répondu Matt Hamilton 2008-12-03 00:22:00