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

#1 Penta
24/10/2005 - 21:34 | Informe spam
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
#2 AlejoR
24/10/2005 - 21:59 | Informe spam
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
#3 Penta
24/10/2005 - 22:12 | Informe spam
Hola
Fijate en lo siguiente :

varchar[(n)]

Datos de caracteres no Unicode de longitud variable con una longitud de
n bytes. n tiene que ser un valor comprendido entre 1 y 8.000. El
tamaño de almacenamiento es la longitud real en bytes de los datos, no
n bytes. Los datos especificados pueden tener una longitud de 0
caracteres. Los sinónimos en SQL-92 para varchar son char varying o
character varying.

nchar(n)

Datos de carácter Unicode de longitud fija, con n caracteres. n debe
estar comprendido entre 1 y 4.000. El tamaño de almacenamiento es dos
veces n bytes. Los sinónimos en SQL-92 para nchar son national char y
national character.

nvarchar(n)

Datos de carácter Unicode de longitud variable, con n caracteres. n
debe ser un valor comprendido entre 1 y 4.000. El tamaño de
almacenamiento, en bytes, es dos veces el número de caracteres
especificados. Los datos especificados pueden tener una longitud de 0
caracteres. Los sinónimos en SQL-92 para nvarchar son national char
varying y national character



ntext

Datos Unicode de longitud variable con una longitud máxima de 230 - 1
(1.073.741.823) caracteres. El tamaño del almacenamiento, en bytes, es
dos veces el número de caracteres especificado. El sinónimo en SQL-92
para ntext es national text.

text

Datos no Unicode de longitud variable, de la página de códigos del
servidor y con una longitud máxima de 231-1 (2.147.483.647)
caracteres. Cuando la página de códigos del servidor utiliza
caracteres de doble byte, el almacenamiento sigue siendo de
2.147.483.647 bytes. Dependiendo de la cadena de caracteres, el espacio
de almacenamiento puede ser inferior a 2.147.483.647 bytes.


Prueba con ntext y text.

Salu2.
Y nos comentas.
Cristian.
Respuesta Responder a este mensaje
#4 AlejoR
24/10/2005 - 22:31 | Informe spam
Hola.

Si eso estuve mirando, pero me surgue una pregunta.
Tengo un procedimiento almacenado que me almacena la NORMA y en el campo
IMAGE esta guardando el contenido de un archivo (DOC, PDF, TXT). El
procedimiento lo lanzo desde ASP.NET de esta manera. Leo el stream del
documento y lo paso como parametro.

' Get document from the stream
iDocLength = hifTNorma.PostedFile.ContentLength
Dim bDocTemp(iDocLength) As Byte
Dim objStream As Stream
objStream = hifTNorma.PostedFile.InputStream
objStream.Read(bDocTemp, 0, iDocLength)

Dim pTextoNorma As SqlParameter
pTextoNorma = objCmd.Parameters.Add("@TEXTO_NORMA",
SqlDbType.Image)
pTextoNorma.Direction = ParameterDirection.Input
pTextoNorma.Value = bDocTemp


Y si lo paso a NTEXT o TEXT como lo leeria desde .NET para mandarlo al
procedimiento almacenado. Intenté usar el mismo objeto STREAM, cambiando lo
necesario al tipo TEXT, pero me sacó error.



"Penta" escribió en el mensaje
news:
Hola
Fijate en lo siguiente :

varchar[(n)]

Datos de caracteres no Unicode de longitud variable con una longitud de
n bytes. n tiene que ser un valor comprendido entre 1 y 8.000. El
tamaño de almacenamiento es la longitud real en bytes de los datos, no
n bytes. Los datos especificados pueden tener una longitud de 0
caracteres. Los sinónimos en SQL-92 para varchar son char varying o
character varying.

nchar(n)

Datos de carácter Unicode de longitud fija, con n caracteres. n debe
estar comprendido entre 1 y 4.000. El tamaño de almacenamiento es dos
veces n bytes. Los sinónimos en SQL-92 para nchar son national char y
national character.

nvarchar(n)

Datos de carácter Unicode de longitud variable, con n caracteres. n
debe ser un valor comprendido entre 1 y 4.000. El tamaño de
almacenamiento, en bytes, es dos veces el número de caracteres
especificados. Los datos especificados pueden tener una longitud de 0
caracteres. Los sinónimos en SQL-92 para nvarchar son national char
varying y national character



ntext

Datos Unicode de longitud variable con una longitud máxima de 230 - 1
(1.073.741.823) caracteres. El tamaño del almacenamiento, en bytes, es
dos veces el número de caracteres especificado. El sinónimo en SQL-92
para ntext es national text.

text

Datos no Unicode de longitud variable, de la página de códigos del
servidor y con una longitud máxima de 231-1 (2.147.483.647)
caracteres. Cuando la página de códigos del servidor utiliza
caracteres de doble byte, el almacenamiento sigue siendo de
2.147.483.647 bytes. Dependiendo de la cadena de caracteres, el espacio
de almacenamiento puede ser inferior a 2.147.483.647 bytes.


Prueba con ntext y text.

Salu2.
Y nos comentas.
Cristian.
Respuesta Responder a este mensaje
#5 Miguel Egea
24/10/2005 - 22:33 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida