que quiero hacer algo comoCómo pasar parámetros a la tabla función de valor
select * from tvfHello(@param) where @param in (Select ID from Users)
que quiero hacer algo comoCómo pasar parámetros a la tabla función de valor
select * from tvfHello(@param) where @param in (Select ID from Users)
Necesita usar CROSS APPLY para lograr este
select
f.*
from
users u
cross apply dbo.tvfHello(u.ID) f
Nunca antes había usado 'CROSS APPLY', ahora veo su ventaja, muchas gracias @kristof. –
Eso se ve bien para mí, excepto que siempre se debe anteponer sus funciones con su esquema (por lo general DBO). Así que la pregunta debería ser:
SELECT * FROM dbo.tvfHello(@param) WHERE @param IN (SELECT ID FROM Users)
No creo, eso funcionaría. si no define @param obtendrá: Debe declarar la variable escalar "@param". error. Si define el @param, obtendrá los resultados a lo que sea que @param esté asignado (NULL por defecto). Para obtener el conjunto completo de resultados, debe utilizar CROSS APPLY – kristof
¿De qué está hablando? Simplemente estoy corrigiendo la consulta que se ofreció en la oración. Rajivdas nunca mencionó el propósito de su consulta, por lo que no puede saber si necesita hacer una SOLICITUD CRUZADA o no. –
Es cierto, la pregunta no es muy clara, basé mi respuesta en los comentarios que Rajivdas hizo para responder por Josh. Mira el comentario de NTulip para ver cuán confundida está la gente. Pero seguramente podría haber sido yo quien lo interpretó erróneamente – kristof
Los siguientes trabajos en la base de datos 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)
basada en la experiencia Kristof he actualizado esta muestra si su tratando de obtener múltiples te valora podría por ejemplo hacer:
select *
from HumanResources.Employee e
CROSS APPLY EmployeeById(e.EmployeeId)
WHERE e.EmployeeId in (5,6,7,8)
en mi caso solo puedo obtener los resultados para employeeId = 10, pero no para el otro valor. ¿Algunas ideas? –
suena como si tratara de hacer algo más complejo que su pregunta indicada. (Que tuve la sensación de que eras) Si desea pasar, por ejemplo, todos los ID del usuario ... una forma sería construir una cadena delegada y luego descomponerla en la función, pero eso frustra el propósito. – JoshBerke
Josh. El ejemplo que usted dio es en realidad lo mismo que llamar a select * from EmployeeById (10) WHERE 10 in (SELECCIONAR EmployeeId FROM HumanResources.Employee). Para obtener resultados para múltiples valores de parámetro, debe usar cross apply (SQLServer2005 +) – kristof
Rajivdas: Podría aclarar su pregunta un poco más. Me temo que cada uno de nosotros lo interpretó de diferentes maneras – kristof