FREETEXT o CONTAINS.!!!

24/10/2005 - 18:40 por AlejoR | Informe spam
Que tal grupo.
Utilizando el query analyzer para ejecutar una consulta con las funciones
FREETEXT o CONTAINS, para buscar texto en una tabla con una campo image el
cual tiene almacenado un documento completo, funciona bien, si paso ese
query a un procedimiento almacenado que reciba por parametro un valor para
que ejecute la sentencia ya no funciona. Primero porque me saca error en la
sentencia FREETEXT (tabla.columna, @variable) o CONTAINS (tabla.columna,
@variable) donde @variable es de tipo image. Si defino @variable como
varchar, no marca error pero la consulta no devuelve filas.

Como se puede hacer una consulta con parametros utilizando FREETEXT o
CONTAINS

Gracias mil

Preguntas similare

Leer las respuestas

#6 AlejoR
24/10/2005 - 22:46 | Informe spam
Si y No, me explico.
Cuando lo hago por el query analyzer
select * from SUH_NORMAS where FREETEXT (SUH_NORMAS.TEXTO_NORMA, 'mi
texto') me devuelve los registros que necesito.

Ahora, cuando creé el procedimiento almacenado, puse el parametro como
@TEXTO_NORMA IMAGE y entonces el
select * from SUH_NORMAS where FREETEXT (SUH_NORMAS.TEXTO_NORMA,
@TEXTO_NORMA) marcó error de sintaxis porque no puedo usar FREETEXT con un
campo de tipo IMAGE

Luego cambie el parametro a @TEXTO_NORMA VARCHAR y el procedimiento no
devolvió nada (cero registros), al ejecutar
exec ListarNormasXTextoNorma 'mi texto'

Cambie el tipo de dato del parametro @TEXTO_NORMA NVARCHAR(1024) y el
query devolvió registros al ejecutar
exec ListarNormasXTextoNorma 'mi texto'

Quedó mejor explicado, o te confundí mas? ;-)


Penta, me recomienda usar TEXT o NTEXT, pero hay tengo una duda que la
formule en el otro hilo!



"Miguel Egea" escribió en el mensaje
news:%
A ver si te he entendido Alejo

Lo que dices es que esto

select * from SUH_NORMAS where FREETEXT (SUH_NORMAS.TEXTO_NORMA, 'tu
texto')
devuelve algo distinto de

create procedure ListarNormasXTextoNorma (@TEXTO_NORMA nvarchar(100))
as
select * from SUH_NORMAS where FREETEXT (SUH_NORMAS.TEXTO_NORMA,
@TEXTO_NORMA)
go
exec ListarNormasXTextoNorma 'tu texto'

¿eso es lo que te está sucediendo?

Saludos
Miguel Egea



"AlejoR" wrote in message
news:
Que tal. Esta es mi tabla

CONSECUTIVO_NORMA CONSECUTIVO (numeric) 9,0
TEXTO_NORMA TEXTO (image) 16,0

Inicialmente el proc tenia esta parametro de tipo image y tenia el
siguiente WHERE

CREATE PROCEDURE ListarNormasXTextoNorma (@TEXTO_NORMA IMAGE)

WHERE FREETEXT (SUH_NORMAS.TEXTO_NORMA, @TEXTO_NORMA)

Pero marcaba error porque al freetext no se le puede poner como parametro
un image. Luego cambié el parametro a tipo VARCHAR, pero no me traia
datos. Ahora lo puse como NVARCHAR (1024) y me esta trayendo los datos.
Ahora la pregunta es? Es esa la solución? Cambiar el tipo de dato a
NVARCHAR?

Que dices?







"Penta" escribió en el mensaje
news:
Hola,
Copia el SP completo aca.

Ps. Asumo que tanto l qry como el SP lo corres en el mismo server.

Salu2.
Cristian.









Respuesta Responder a este mensaje
#7 Miguel Egea
25/10/2005 - 00:12 | Informe spam
Vale
la explicación es, el segundo parámetro es un texto, no una imagen, si
pusiste varchar, sin especificar longitud, el toma 1
, es decir
declare @a varchar
set @a='hola'
select @a
devuelve 'h' no 'hola' ese es el motivo por el que no te funcionó, en cuanto
te pusiste una longitud, pues listo, a funcionar.
No pongas text ni next, no creo que sea una buena idea, ni estoy seguro que
te lo admita, de todas formas, no creo que te dediques a usar medio quijote
como cadena de búsqueda ¿verdad?

Saludos
Miguel Egea

"AlejoR" wrote in message
news:%
Si y No, me explico.
Cuando lo hago por el query analyzer
select * from SUH_NORMAS where FREETEXT (SUH_NORMAS.TEXTO_NORMA, 'mi
texto') me devuelve los registros que necesito.

Ahora, cuando creé el procedimiento almacenado, puse el parametro como
@TEXTO_NORMA IMAGE y entonces el
select * from SUH_NORMAS where FREETEXT (SUH_NORMAS.TEXTO_NORMA,
@TEXTO_NORMA) marcó error de sintaxis porque no puedo usar FREETEXT con
un campo de tipo IMAGE

Luego cambie el parametro a @TEXTO_NORMA VARCHAR y el procedimiento no
devolvió nada (cero registros), al ejecutar
exec ListarNormasXTextoNorma 'mi texto'

Cambie el tipo de dato del parametro @TEXTO_NORMA NVARCHAR(1024) y el
query devolvió registros al ejecutar
exec ListarNormasXTextoNorma 'mi texto'

Quedó mejor explicado, o te confundí mas? ;-)


Penta, me recomienda usar TEXT o NTEXT, pero hay tengo una duda que la
formule en el otro hilo!



"Miguel Egea" escribió en el mensaje
news:%
A ver si te he entendido Alejo

Lo que dices es que esto

select * from SUH_NORMAS where FREETEXT (SUH_NORMAS.TEXTO_NORMA, 'tu
texto')
devuelve algo distinto de

create procedure ListarNormasXTextoNorma (@TEXTO_NORMA
nvarchar(100))
as
select * from SUH_NORMAS where FREETEXT (SUH_NORMAS.TEXTO_NORMA,
@TEXTO_NORMA)
go
exec ListarNormasXTextoNorma 'tu texto'

¿eso es lo que te está sucediendo?

Saludos
Miguel Egea



"AlejoR" wrote in message
news:
Que tal. Esta es mi tabla

CONSECUTIVO_NORMA CONSECUTIVO (numeric) 9,0
TEXTO_NORMA TEXTO (image) 16,0

Inicialmente el proc tenia esta parametro de tipo image y tenia el
siguiente WHERE

CREATE PROCEDURE ListarNormasXTextoNorma (@TEXTO_NORMA IMAGE)

WHERE FREETEXT (SUH_NORMAS.TEXTO_NORMA, @TEXTO_NORMA)

Pero marcaba error porque al freetext no se le puede poner como
parametro un image. Luego cambié el parametro a tipo VARCHAR, pero no me
traia datos. Ahora lo puse como NVARCHAR (1024) y me esta trayendo los
datos. Ahora la pregunta es? Es esa la solución? Cambiar el tipo de
dato a NVARCHAR?

Que dices?







"Penta" escribió en el mensaje
news:
Hola,
Copia el SP completo aca.

Ps. Asumo que tanto l qry como el SP lo corres en el mismo server.

Salu2.
Cristian.













Respuesta Responder a este mensaje
#8 AlejoR
25/10/2005 - 16:46 | Informe spam
;-)
Ok


"Miguel Egea" escribió en el mensaje
news:%
Vale
la explicación es, el segundo parámetro es un texto, no una imagen, si
pusiste varchar, sin especificar longitud, el toma 1
, es decir
declare @a varchar
set @a='hola'
select @a
devuelve 'h' no 'hola' ese es el motivo por el que no te funcionó, en
cuanto te pusiste una longitud, pues listo, a funcionar.
No pongas text ni next, no creo que sea una buena idea, ni estoy seguro
que te lo admita, de todas formas, no creo que te dediques a usar medio
quijote como cadena de búsqueda ¿verdad?

Saludos
Miguel Egea

"AlejoR" wrote in message
news:%
Si y No, me explico.
Cuando lo hago por el query analyzer
select * from SUH_NORMAS where FREETEXT (SUH_NORMAS.TEXTO_NORMA, 'mi
texto') me devuelve los registros que necesito.

Ahora, cuando creé el procedimiento almacenado, puse el parametro como
@TEXTO_NORMA IMAGE y entonces el
select * from SUH_NORMAS where FREETEXT (SUH_NORMAS.TEXTO_NORMA,
@TEXTO_NORMA) marcó error de sintaxis porque no puedo usar FREETEXT con
un campo de tipo IMAGE

Luego cambie el parametro a @TEXTO_NORMA VARCHAR y el procedimiento
no devolvió nada (cero registros), al ejecutar
exec ListarNormasXTextoNorma 'mi texto'

Cambie el tipo de dato del parametro @TEXTO_NORMA NVARCHAR(1024) y el
query devolvió registros al ejecutar
exec ListarNormasXTextoNorma 'mi texto'

Quedó mejor explicado, o te confundí mas? ;-)


Penta, me recomienda usar TEXT o NTEXT, pero hay tengo una duda que la
formule en el otro hilo!



"Miguel Egea" escribió en el mensaje
news:%
A ver si te he entendido Alejo

Lo que dices es que esto

select * from SUH_NORMAS where FREETEXT (SUH_NORMAS.TEXTO_NORMA, 'tu
texto')
devuelve algo distinto de

create procedure ListarNormasXTextoNorma (@TEXTO_NORMA nvarchar(100))
as
select * from SUH_NORMAS where FREETEXT (SUH_NORMAS.TEXTO_NORMA,
@TEXTO_NORMA)
go
exec ListarNormasXTextoNorma 'tu texto'

¿eso es lo que te está sucediendo?

Saludos
Miguel Egea



"AlejoR" wrote in message
news:
Que tal. Esta es mi tabla

CONSECUTIVO_NORMA CONSECUTIVO (numeric) 9,0
TEXTO_NORMA TEXTO (image) 16,0

Inicialmente el proc tenia esta parametro de tipo image y tenia el
siguiente WHERE

CREATE PROCEDURE ListarNormasXTextoNorma (@TEXTO_NORMA IMAGE)

WHERE FREETEXT (SUH_NORMAS.TEXTO_NORMA, @TEXTO_NORMA)

Pero marcaba error porque al freetext no se le puede poner como
parametro un image. Luego cambié el parametro a tipo VARCHAR, pero no
me traia datos. Ahora lo puse como NVARCHAR (1024) y me esta trayendo
los datos. Ahora la pregunta es? Es esa la solución? Cambiar el tipo
de dato a NVARCHAR?

Que dices?







"Penta" escribió en el mensaje
news:
Hola,
Copia el SP completo aca.

Ps. Asumo que tanto l qry como el SP lo corres en el mismo server.

Salu2.
Cristian.

















Respuesta Responder a este mensaje
#9 Penta
25/10/2005 - 16:58 | Informe spam
Hola Again.
Primero no recomende el uso de text ni ntext, solo dije :

"Prueba con ntext y text " xD

La idea era ver el resultado. Además que tuvieses una visión claro
hasta donde te perimite cada tipo de dato.
Lo que indica Miguel es totalmente valido, el tema es que pasa cuando e
teoria te pasas del nivel perimitido de un tipo, obviamente con
varchar(n) te resulta ok, el tema interesante seria que pasa si tienes
un documento que no soporte los 8000 que te da ese tipo ?, en fin era
solo una idea del maximo al que podias llegar.

De todas maneras que bueno que este resuleto el problemilla. xD

Salu2.
Penta.
Respuesta Responder a este mensaje
#10 Miguel Egea
25/10/2005 - 18:06 | Informe spam
asi es en 2000, gracias a dios no lo sera en 2005, de todas formas el tema
es que buscar textos de más de 8000 caracteres parece mucho, fijate si
hicieses eso en google, parede demasiado restrictivo ¿no?


Miguel Egea
SQL Server MVP, Mentor
Solid Quality Learning
http://www.SolidQualityLearning.com
"Solid Quality Learning is the trusted global provider of advanced education
and solutions for the entire Microsoft database platform"


"Penta" wrote in message
news:
Hola Again.
Primero no recomende el uso de text ni ntext, solo dije :

"Prueba con ntext y text " xD

La idea era ver el resultado. Además que tuvieses una visión claro
hasta donde te perimite cada tipo de dato.
Lo que indica Miguel es totalmente valido, el tema es que pasa cuando e
teoria te pasas del nivel perimitido de un tipo, obviamente con
varchar(n) te resulta ok, el tema interesante seria que pasa si tienes
un documento que no soporte los 8000 que te da ese tipo ?, en fin era
solo una idea del maximo al que podias llegar.

De todas maneras que bueno que este resuleto el problemilla. xD

Salu2.
Penta.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida