Come passare i parametri alla funzione con valori di tabella
-
22-07-2019 - |
Domanda
Voglio fare qualcosa del genere
select * from tvfHello(@param) where @param in (Select ID from Users)
Soluzione
Devi usare CROSS APPLY per raggiungere questo obiettivo
select
f.*
from
users u
cross apply dbo.tvfHello(u.ID) f
Altri suggerimenti
Il seguente funziona nel database 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)
Modifica
Sulla base dell'esperienza Kristof, ho aggiornato questo esempio se, ad esempio, stai cercando di ottenere più valori:
select *
from HumanResources.Employee e
CROSS APPLY EmployeeById(e.EmployeeId)
WHERE e.EmployeeId in (5,6,7,8)
Mi sembra giusto, tranne per il fatto che dovresti sempre aggiungere il prefisso alle tue funzioni con il loro schema (di solito dbo). Quindi la query dovrebbe essere:
SELECT * FROM dbo.tvfHello(@param) WHERE @param IN (SELECT ID FROM Users)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow