it-swarm.com.de

Wie werden Parameter an die Tabellenwertfunktion übergeben?

Ich möchte sowas machen

select * from tvfHello(@param) where @param in (Select ID from Users)
22
R.D

Dazu müssen Sie CROSS APPLY verwenden

select 
    f.* 
from 
    users u
    cross apply dbo.tvfHello(u.ID) f
37
kristof

In der AdventureWorks-Datenbank funktioniert Folgendes:

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)

BEARBEITEN

Basierend auf Kristofs Expertenwissen habe ich dieses Beispiel aktualisiert, wenn Sie versuchen, mehrere Werte zu erhalten, die Sie beispielsweise tun könnten:

select * 
from HumanResources.Employee e
CROSS APPLY  EmployeeById(e.EmployeeId)
WHERE e.EmployeeId in (5,6,7,8)
4
JoshBerke

Das sieht für mich ok aus, außer dass Sie Ihren Funktionen immer ihr Schema voranstellen sollten (normalerweise dbo). Die Abfrage sollte also lauten:

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