SQL Server - Pasar campo de una tabla a una función de usuario.

 
Vista:

Pasar campo de una tabla a una función de usuario.

Publicado por Pablo Daniel (19 intervenciones) el 21/11/2019 16:06:02
Hola a todos.

Es para hacele una pregunta concreta.

Si se puede pasar a un función de usuario que retorna una tabla un parámetro que es un campo de otra tabla. Por ejemplo cuando invoca la función de usuario PAGO: PAGO(cam). Pero cam es una variable no es un constante porque es un campo de otra tabla. ¿ O no queda otra alternativa que pasarle como variable de usuario o sea PAGO(@var) cuando invoco la función, con @var = cam?

Aclaración: La invocación de la función de usuario que retorna una tabla, lo hago dentro de un select mas precisamente dentro del From.

Esperando una respuesta. Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Pasar campo de una tabla a una función de usuario.

Publicado por Isaias (4558 intervenciones) el 21/11/2019 16:47:58
Veamos

Si estamos hablando que la funcion retorna UNA TABLA, no veo como pasarle el valor de una tabla !

Si depende del valor que le pases, te regresa una tabla, imaginate tu, que le pasaras 1000 registros de una tabla como paramatro y te regresara 1000 tablas con diferentes valores, algo asi.

¿select * from dbo.MyFuncion(select micampo from mi tabla)?

No se cual sea el objetivo de la funcion, ¿podrias explicarlo?

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Pasar campo de una tabla a una función de usuario.

Publicado por Pablo Almada (19 intervenciones) el 21/11/2019 17:49:03
El codigo mas simple seria este:
tabla1= es una tabla comun
cam = es un campo de tipo xml que contiene un arhivo xml que pertenece a tabla1
dbo.pago(cam)= funcion que retorna una tabla con los elementos de un archivo xml

Asi es la sentencia general :

select cam from tabla1 p left join dbo.pago(cam) f on p.codigo = f.codigo

-- Lo correcto sea outer apply, pero lo hize para entender que lo que quiero hacer es no pasar una tabla o una cantidad multiple
-- de valores de cam a la función , sino por cada registro de tabla1 que se ejecuta en el select pasarle su respecivo campo cam de tipo xml. Un valor cam por vez o sea un solo archivo xml por vez. Esto lo hago para que se visualize los elementos de un archivo xml como campos de tabla en el resultado de la consulta.

Y lo que necesito es pasarle cam a la función de usuario, pero no me esta dejando sql server a no ser que haga esto antes del Select, declarar un variable de usuario(@var), pasarle el valor camp de tabla1(pero solo me va a pasar el primer valor y nada mas) y usar ese varialbe(@var) como paramero cuando invoco la funcio dbo.pago.

declare @ var xml;
select @var = cam from tabla1;
b]select cam from tabla1 p left join dbo.pago(@var) f on p.codigo = f.codigo
[/b]

-- pero el problema es que la variable de usuario @var va contener solo el primer valor cam, o sea por cada registro
-- que se ejecuta de la sentencia general simpre va contener el mismo valor cam.
--meter el select @var = cam from tabla1 dentro del select de la consulta general me da error.


Esperando su respueta. Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Pasar campo de una tabla a una función de usuario.

Publicado por Isaias (4558 intervenciones) el 21/11/2019 17:53:40
1
2
3
declare @ var xml;
select @var = cam from tabla1;
b]select cam from tabla1 p left join dbo.pago(@var) f on p.codigo = f.codigo[/b]

¿Esto te devuelve UN SOLO VALOR?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Pasar campo de una tabla a una función de usuario.

Publicado por Pablo Almada (19 intervenciones) el 21/11/2019 19:03:03
1
2
3
declare @ var xml;
select @var = cam from tabla1;
b]select cam from tabla1 p left join dbo.pago(@var) f on p.codigo = f.codigo[/b]

b]select cam from tabla1 p outer apply dbo.pago(@var)


Es con outer apply si disculpa. Si esta bien. Lo habia hecho con left join para hacerme entende porque es el que mejor entiendo.

Pero vuelvo al mismo problema planteado anteriormente , la funcion de usuario de tabla solo me retorna la tabla con campos del primer archivo xml. Esto es porque yo hago: select @var = cam from tabla1;. Como puedo hacer para que @var me vaya tomando el archivo xml correcto de cada registro de tabla1 y no siempre del archivo xml del registro uno o primer registro.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Pasar campo de una tabla a una función de usuario.

Publicado por Pablo Almada (19 intervenciones) el 21/11/2019 20:04:32
Si ya me ejecuta la sentencia bien con outer apply y me anda ..Ya me toma cada archivo xml de cada registro de la tabla1.

Este operador si toma el parametro sin definirlo como variable de usuario(sin @). Disculpe mi ignorancia con outer apply

Lo que si veo que esta operador outer apply se aplica generalmente con tabla y funciones de usuario.
Si funconaria aplicando outer apply con dos tablas ? gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar