Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

problemas con containstable y tíldes

Estas en el tema de problemas con containstable y tíldes en el foro de SQL Server en Foros del Web. Estimados, tengo el siguiente problema, sucede que tengo una tabla con x campos y estoy usando el containstable para mis busquedas, pero el problema es ...
  #1 (permalink)  
Antiguo 29/12/2008, 16:42
 
Fecha de Ingreso: agosto-2006
Ubicación: en lima peru
Mensajes: 184
Antigüedad: 17 años, 8 meses
Puntos: 0
problemas con containstable y tíldes

Estimados, tengo el siguiente problema, sucede que tengo una tabla con x campos y estoy usando el containstable para mis busquedas, pero el problema es que si mis registros contienen tildes y yo ingreso una palabra sin tilde por ejempl ( Roldán) y yo ingreso Roldan, no me lo muestra, alguna sugerencia??


Pdt: los campos indexados contienen un collation SQL_Latin1_General_CP1_CI_AI, la cual infiere en tildes, minusculas y mayusculas.

Saben ustedes que mas tengo que cambiar para la solucion?

Gracias.
  #2 (permalink)  
Antiguo 30/12/2008, 00:39
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 10 meses
Puntos: 180
Respuesta: problemas con containstable y tíldes

La terminacion de tu Collate "AI" significa (Accent Insensitive) INSENSITIVO A ACENTOS, debes cambiarlo por "AS"
  #3 (permalink)  
Antiguo 30/12/2008, 06:35
 
Fecha de Ingreso: agosto-2006
Ubicación: en lima peru
Mensajes: 184
Antigüedad: 17 años, 8 meses
Puntos: 0
Respuesta: problemas con containstable y tíldes

HOLA GRACIAS POR TU RESPUESTA, LO QUE SUCEDE ES QUE LOS CAMPOS YA LOS CAMBIE POR EL COLLATE Latin1_General_CI_AS YO HAGO EL MATCH EN LA SENTENCIA CONTAINSTABLE POR EJEMPLO:


FROM T_TIE_PRODUCTO PRO WITH(NOLOCK)
INNER JOIN @vtbl_Descendencia c on c.PRO_ID=PRO.PRO_ID
INNER JOIN CONTAINSTABLE (T_TIE_PRODUCTO,*, 'ROLDAN') AS KEY_TBL
ON PRO.PRO_ID = KEY_TBL.[KEY]


Y NO ME DEVUELVE LOS REGISTROS "Roldan, ROLDAN, Roldán, ROLDÁN" ALGUNA SUGERENCIA?

TE ADJUNTO MI CODIGO SQL:

Código:
alter  PROCEDURE dbo.PW_TIE_L_BusquedaProducto   -- dbo.PW_TIE_L_BusquedaProducto 0, 1, '-1', -1, 0, 'ROLDÁN', ''  
@piint_AreCodigo tinyint,  
@piint_TipoCodigo tinyint,  
@pivch_Identificador varchar(50),  
@piint_ProId int,  
@piint_NivelMaximo tinyint,  
@pivch_Busqueda varchar(255),  
@pivch_BusquedaHtmlEnc varchar(500)  
AS  
SET NOCOUNT ON  
DECLARE @vint_Hijos int, @vint_Hijos1 int, @vint_ProIdPadre int  
  
IF @piint_TipoCodigo<>0  
 SET @piint_ProId=(SELECT TOP 1 PRO_ID FROM T_TIE_PRODUCTO WITH(NOLOCK) WHERE IDENTIFICADOR=@pivch_Identificador AND ARE_CODIGO=@piint_AreCodigo)  
ELSE  
 IF @pivch_Identificador='-1' OR @piint_ProId=-1  
  SET @piint_ProId=NULL  
  
SET @piint_ProId=ISNULL(@piint_ProId,-1)  
  
SELECT @vint_Hijos = (SELECT COUNT(PRO_ID) FROM T_TIE_PRODUCTO WITH(NOLOCK)  
   WHERE ISNULL(PRO_ID_PADRE,-1)= @piint_ProId --AND JER_VISIBLE_MENU='S'  
         AND PRO_ESTADO<>'I' AND ARE_CODIGO=@piint_AreCodigo)  
  
IF @vint_Hijos>0  
   BEGIN  
 SET @vint_Hijos1=@vint_Hijos  
 SET @vint_ProIdPadre=(SELECT TOP 1 PRO_ID_PADRE FROM T_TIE_PRODUCTO WITH(NOLOCK) WHERE PRO_ID=@piint_ProId)  
  
 DECLARE @vtbl_Descendencia  
 TABLE (PRO_ID_PADRE int, PRO_ID int, PROFUNDIDAD tinyint)  
   
 INSERT INTO @vtbl_Descendencia  
 SELECT A.PRO_ID_PADRE, A.PRO_ID, 1  
 FROM T_TIE_PRODUCTO A WITH(NOLOCK)  
 WHERE ISNULL(PRO_ID_PADRE,-1) = @piint_ProId   
  AND A.PRO_ESTADO<>'I' --AND A.PRO_TIPO<>'C'  
  AND A.ARE_CODIGO=@piint_AreCodigo  
  
 WHILE @@ROWCOUNT>0  
 BEGIN  
  INSERT INTO @vtbl_Descendencia  
      SELECT A.PRO_ID_PADRE, A.PRO_ID, B.PROFUNDIDAD+1  
      FROM T_TIE_PRODUCTO A WITH(NOLOCK)  
      INNER JOIN @vtbl_Descendencia B ON B.PRO_ID=A.PRO_ID_PADRE  
      WHERE A.ARE_CODIGO=@piint_AreCodigo  
   AND A.PRO_ESTADO<>'I' --AND A.PRO_TIPO<>'C'  
   AND NOT EXISTS (SELECT D.PRO_ID FROM @vtbl_Descendencia D WHERE D.PRO_ID=A.PRO_ID)  
 END  
  
 IF @pivch_BusquedaHtmlEnc<>@pivch_Busqueda AND LEN(@pivch_BusquedaHtmlEnc)>0  
  SET @pivch_Busqueda = '('+@pivch_Busqueda+') OR ('+@pivch_BusquedaHtmlEnc+')'  
  
 SELECT  PRO.PRO_ID,  
  PRO.ENT_ID,   
  PRO_ID_PADRE = ISNULL(PRO.PRO_ID_PADRE,-1),  
  PRO_NOMBRE_PADRE=ISNULL((SELECT PRO_NOMBRE FROM T_TIE_PRODUCTO WITH(NOLOCK) WHERE PRO_ID = PRO.PRO_ID_PADRE),''),  
  PRO_CODIGO = ISNULL(PRO.PRO_CODIGO,''),  
  PRO.PRO_NOMBRE,   
  PRO.PRO_TIPO,   
  PRO_DESTAQUE = ISNULL(PRO.PRO_DESTAQUE,'N'),  
  PRO_MONEDA = ISNULL(PRO.PRO_MONEDA,0),  
  PRO_MONEDA_SIMBOLO = (SELECT MON_SIMBOLO FROM T_TIE_MONEDA WITH(NOLOCK) WHERE MON_CODIGO = PRO.PRO_MONEDA),  
  PRO_PRECIO = ISNULL(PRO.PRO_PRECIO,0),  
  PRO_BREVE_DESCRIPCION = ISNULL(PRO.PRO_BREVE_DESCRIPCION,''),  
  PRO_RUTA_IMAGEN_ASOCIADA = ISNULL(PRO.PRO_RUTA_IMAGEN_ASOCIADA,''),  
  PRO_HABILITA_OFERTA= ISNULL(PRO.PRO_HABILITA_OFERTA,'N'),  
  PRO_PRECIO_OFERTA= ISNULL(PRO.PRO_PRECIO_OFERTA,0),  
  PRO_STOCK_ACTUAL = ISNULL(PRO.PRO_STOCK_ACTUAL,0),  
  PRO_HABILITA_STOCK = ISNULL(PRO.PRO_HABILITA_STOCK,'N'),  
  KEY_TBL.RANK  
 FROM T_TIE_PRODUCTO PRO WITH(NOLOCK)  
  INNER JOIN @vtbl_Descendencia c on c.PRO_ID=PRO.PRO_ID  
  INNER JOIN CONTAINSTABLE (T_TIE_PRODUCTO,*, @pivch_Busqueda) AS KEY_TBL  
     ON PRO.PRO_ID = KEY_TBL.[KEY]  
 WHERE (@piint_NivelMaximo=0 OR PROFUNDIDAD<=@piint_NivelMaximo)   
  AND PRO.ARE_CODIGO = @piint_AreCodigo   
  AND PRO.PRO_ESTADO<>'I' AND PRO.PRO_TIPO<>'C'  
 ORDER BY KEY_TBL.RANK DESC  
  
   END  
  
ELSE  
 SELECT  PRO_ID,   
  PRO_ID_PADRE,  
  PRO_NOMBRE_PADRE='',  
  PRO_CODIGO,  
  PRO_NOMBRE,   
  PRO_TIPO,   
  PRO_DESTAQUE,  
  PRO_MONEDA,  
  PRO_MONEDA_SIMBOLO='',  
  PRO_PRECIO,  
  PRO_BREVE_DESCRIPCION,  
  PRO_RUTA_IMAGEN_ASOCIADA,  
  RANK=''  
 FROM T_TIE_PRODUCTO  
 WHERE @piint_ProId=-999
  #4 (permalink)  
Antiguo 30/12/2008, 15:31
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 10 meses
Puntos: 180
Respuesta: problemas con containstable y tíldes

(Espero que alguien me corrija de estar en un error)

Si lo hiciste por ALTER TABLE, que seguramente fue asi, el alterar el COLLATE, no altera el mismo de los registros ya existentes.

Tendrias que "sacarlos de tu tabla" (ponerlos en una temporal, todos tus registros), cambiar tu COLLATE (como ya lo hiciste), hacer un TRUNCATE de tus registros y volverlos a colocar de tu tabla temporal.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:19.