problema en un join

26/06/2006 - 21:01 por Pablo | Informe spam
hola buen dia...
Les cuento mi problema...
tengo una select con un join de una tabla con una funcion de usuario y me da
error

SELECT *
FROM TABLA T
Inner Join dbo.duf_FUNCION(null,T.ID,1,'A') F On T.ID = F.ID

Servidor: mensaje 170, nivel 15, estado 1, línea 3
Línea 2: sintaxis incorrecta cerca de 'T'.

el error es por el parametro que le paso a la funcion.

si yo escribo el parametro funciona

SELECT *
FROM TABLA T
Inner Join dbo.duf_FUNCION(null,'Parametro',1,'A') F On T.ID = F.ID

si alguien sabe como resolverlo me ayudaria mucho
desde ya muchas gracias
Pablo

Preguntas similare

Leer las respuestas

#1 Elcritico
26/06/2006 - 22:06 | Informe spam
porque no haces
SELECT *, dbo.duf_FUNCION(null,T.ID,1,'A') FROM TABLA T

o la funcion te devuelve mas de 1 campo?
Lic. Flavio A. Dellarupe<br>
Visual Fox Developer
Bs.As.-Argentina



"Pablo" escribió:

hola buen dia...
Les cuento mi problema...
tengo una select con un join de una tabla con una funcion de usuario y me da
error

SELECT *
FROM TABLA T
Inner Join dbo.duf_FUNCION(null,T.ID,1,'A') F On T.ID = F.ID

Servidor: mensaje 170, nivel 15, estado 1, línea 3
Línea 2: sintaxis incorrecta cerca de 'T'.

el error es por el parametro que le paso a la funcion.

si yo escribo el parametro funciona

SELECT *
FROM TABLA T
Inner Join dbo.duf_FUNCION(null,'Parametro',1,'A') F On T.ID = F.ID

si alguien sabe como resolverlo me ayudaria mucho
desde ya muchas gracias
Pablo



Respuesta Responder a este mensaje
#2 Pablo
26/06/2006 - 22:14 | Informe spam
asi es, la funcion devuelve una tabla.
y no se realmente porque da ese error... sigo buscando en internet pero no
encuentro nada
muchas gracias.
Pablo

"Elcritico" escribió en el mensaje
news:
porque no haces
SELECT *, dbo.duf_FUNCION(null,T.ID,1,'A') FROM TABLA T

o la funcion te devuelve mas de 1 campo?
Lic. Flavio A. Dellarupe<br>
Visual Fox Developer
Bs.As.-Argentina



"Pablo" escribió:

> hola buen dia...
> Les cuento mi problema...
> tengo una select con un join de una tabla con una funcion de usuario y


me da
> error
>
> SELECT *
> FROM TABLA T
> Inner Join dbo.duf_FUNCION(null,T.ID,1,'A') F On T.ID = F.ID
>
> Servidor: mensaje 170, nivel 15, estado 1, línea 3
> Línea 2: sintaxis incorrecta cerca de 'T'.
>
> el error es por el parametro que le paso a la funcion.
>
> si yo escribo el parametro funciona
>
> SELECT *
> FROM TABLA T
> Inner Join dbo.duf_FUNCION(null,'Parametro',1,'A') F On T.ID = F.ID
>
> si alguien sabe como resolverlo me ayudaria mucho
> desde ya muchas gracias
> Pablo
>
>
>
Respuesta Responder a este mensaje
#3 Pablo
26/06/2006 - 22:31 | Informe spam
Jorge fuiste muy claro. Te agradezco mucho. Ahora me doy cuenta del error,
voy a intentar encontrar una solucion.
Muchas Gracias
Pablo.

"Jorge Gonzalez" escribió en el mensaje
news:%
Estimado Pablo

En tu select tenés un problema conceptual un poco difícil de detectar a
primera vista, pero si lo analizás con cuidado te vas a dar cuenta. Es más


o
menos sobre qué fue primero, el huevo o la gallina.

Tu select es a partir de un inner join entre una tabla (T) y el resultado
de una función. Esto implica que para hacer el select, SQL server debe
ejecutar la función, obtener un resultado temporal GLOBAL que luego va a


ser
unido con otro resultado temporal de la tabla T para lograr determinar los
registros que cumplan la clausula INNER JOIN. Como podés observar de lo


que
te explico, la función debe poder retornar un resultado que es


independiente
al SELECT mismo, pero vos estás mandando como parámetro de la misma una
columna de la tabla T, esto implicaría, si fuera posible, que la función T
retornaría tantos resultados temporales como filas hay en la tabla T lo


cual
no tiene sentido.

No sé si he logrado explicar claramente el punto, pero en síntesis pasar


un
parámetro columna de la forma en que lo estás haciendo no es posible ya


que
función debe poder retornar un resultado que luego será "unido" con el


join
con el resultado de la tabla para obtener el resultado final. Y vos estás
obligando a dbo.duf_FUNCION a ejecutarse tantas veces como registros hay


en
la tabla T.

Sin conocer detalles de implementación, no puedo darte una alternativa de
solución, pero analizá bien el problema y seguramente encontrarás un
algoritmo que te resuelva.

saludos
Jorge González

"Pablo" escribió en el mensaje
news:%
> hola buen dia...
> Les cuento mi problema...
> tengo una select con un join de una tabla con una funcion de usuario y


me
> da
> error
>
> SELECT *
> FROM TABLA T
> Inner Join dbo.duf_FUNCION(null,T.ID,1,'A') F On T.ID = F.ID
>
> Servidor: mensaje 170, nivel 15, estado 1, línea 3
> Línea 2: sintaxis incorrecta cerca de 'T'.
>
> el error es por el parametro que le paso a la funcion.
>
> si yo escribo el parametro funciona
>
> SELECT *
> FROM TABLA T
> Inner Join dbo.duf_FUNCION(null,'Parametro',1,'A') F On T.ID = F.ID
>
> si alguien sabe como resolverlo me ayudaria mucho
> desde ya muchas gracias
> Pablo
>
>


Respuesta Responder a este mensaje
#4 Jorge Gonzalez
26/06/2006 - 23:20 | Informe spam
Estimado Pablo

En tu select tenés un problema conceptual un poco difícil de detectar a
primera vista, pero si lo analizás con cuidado te vas a dar cuenta. Es más o
menos sobre qué fue primero, el huevo o la gallina.

Tu select es a partir de un inner join entre una tabla (T) y el resultado
de una función. Esto implica que para hacer el select, SQL server debe
ejecutar la función, obtener un resultado temporal GLOBAL que luego va a ser
unido con otro resultado temporal de la tabla T para lograr determinar los
registros que cumplan la clausula INNER JOIN. Como podés observar de lo que
te explico, la función debe poder retornar un resultado que es independiente
al SELECT mismo, pero vos estás mandando como parámetro de la misma una
columna de la tabla T, esto implicaría, si fuera posible, que la función T
retornaría tantos resultados temporales como filas hay en la tabla T lo cual
no tiene sentido.

No sé si he logrado explicar claramente el punto, pero en síntesis pasar un
parámetro columna de la forma en que lo estás haciendo no es posible ya que
función debe poder retornar un resultado que luego será "unido" con el join
con el resultado de la tabla para obtener el resultado final. Y vos estás
obligando a dbo.duf_FUNCION a ejecutarse tantas veces como registros hay en
la tabla T.

Sin conocer detalles de implementación, no puedo darte una alternativa de
solución, pero analizá bien el problema y seguramente encontrarás un
algoritmo que te resuelva.

saludos
Jorge González

"Pablo" escribió en el mensaje
news:%
hola buen dia...
Les cuento mi problema...
tengo una select con un join de una tabla con una funcion de usuario y me
da
error

SELECT *
FROM TABLA T
Inner Join dbo.duf_FUNCION(null,T.ID,1,'A') F On T.ID = F.ID

Servidor: mensaje 170, nivel 15, estado 1, línea 3
Línea 2: sintaxis incorrecta cerca de 'T'.

el error es por el parametro que le paso a la funcion.

si yo escribo el parametro funciona

SELECT *
FROM TABLA T
Inner Join dbo.duf_FUNCION(null,'Parametro',1,'A') F On T.ID = F.ID

si alguien sabe como resolverlo me ayudaria mucho
desde ya muchas gracias
Pablo


Respuesta Responder a este mensaje
#5 qwalgrande
27/06/2006 - 07:42 | Informe spam
Hola.

Si estás usando SQL Server 2005, en lugar de "inner join" debes realizar una
unión CROSS APPLY. Mira en los BOL, es una nueva funcionalidad cuyo fin es
exactamente el que tú quieres conseguir con la consulta, es decir, cruzar
una tabla con una función que devuelve conjunto de registros y en la que uno
de los parámetros es un campo de la primera tabla.

Alberto López Grande (qwalgrande)


"Pablo" escribió en el mensaje
news:%
hola buen dia...
Les cuento mi problema...
tengo una select con un join de una tabla con una funcion de usuario y me
da
error

SELECT *
FROM TABLA T
Inner Join dbo.duf_FUNCION(null,T.ID,1,'A') F On T.ID = F.ID

Servidor: mensaje 170, nivel 15, estado 1, línea 3
Línea 2: sintaxis incorrecta cerca de 'T'.

el error es por el parametro que le paso a la funcion.

si yo escribo el parametro funciona

SELECT *
FROM TABLA T
Inner Join dbo.duf_FUNCION(null,'Parametro',1,'A') F On T.ID = F.ID

si alguien sabe como resolverlo me ayudaria mucho
desde ya muchas gracias
Pablo


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida