voglio fare qualcosa di simileCome passare parametri a valori di tabella funzioni
select * from tvfHello(@param) where @param in (Select ID from Users)
voglio fare qualcosa di simileCome passare parametri a valori di tabella funzioni
select * from tvfHello(@param) where @param in (Select ID from Users)
È necessario utilizzare CROSS APPLY per raggiungere questo
select
f.*
from
users u
cross apply dbo.tvfHello(u.ID) f
Non ho mai usato 'CROSS APPLY' prima, Ora ne vedo il vantaggio, Grazie mille @kristof. –
Che sembra ok a me, se non che si dovrebbe sempre anteporre le funzioni con il loro schema (di solito dbo). Quindi la domanda dovrebbe essere:
SELECT * FROM dbo.tvfHello(@param) WHERE @param IN (SELECT ID FROM Users)
Non credo, funzionerebbe. se non definisci la @param, otterrai: Devi dichiarare la variabile scalare "@param". errore. Se si definisce @param, i risultati verranno assegnati a qualunque sia @param assegnato (NULL per impostazione predefinita). Per ottenere l'intera serie di risultati è necessario utilizzare CROSS APPLY – kristof
Di cosa stai parlando? Sto semplicemente correggendo la query che è stata offerta nella frase. Rajivdas non ha mai dichiarato l'intento della sua domanda, quindi non puoi sapere se ha bisogno di fare una domanda incrociata o meno. –
Vero, la domanda non è molto chiara, ho basato la mia risposta sui commenti fatti da Rajivdas per rispondere a Josh. Guarda il commento di NTulip per vedere come si confondono alcune persone. Ma sicuramente potrebbe essere stato io a interpretare erroneamente – kristof
Le seguenti opere 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)
sulla base di competenze Kristof ho aggiornato questo campione, se il vostro cercando di ottenere più valori per esempio:
select *
from HumanResources.Employee e
CROSS APPLY EmployeeById(e.EmployeeId)
WHERE e.EmployeeId in (5,6,7,8)
nel mio caso, posso solo i risultati per employeeId = 10, ma non per l'altro valore. Qualche idea? –
sembra che tu stia cercando di fare qualcosa di più complesso della tua domanda indicata. (Che avevo la sensazione che tu fossi). Si vuole passare per esempio a tutti gli userId ... un modo sarebbe quello di costruire una stringa delimitata e poi scomporla nella funzione, ma che sconfigge lo scopo. – JoshBerke
Josh. L'esempio che hai fornito è in realtà lo stesso di chiamare select * da EmployeeById (10) WHERE 10 in (SELECT EmployeeId FROM HumanResources.Employee). Per ottenere risultati per più valori di parametro è necessario utilizzare cross apply (SQLServer2005 +) – kristof
Rajivdas: si potrebbe chiarire la tua domanda un po 'di più. Temo che ognuno di noi l'abbia interpretato in modi diversi. – kristof