** Para Javier Loria **

26/05/2004 - 19:44 por Isaías | Informe spam
Hola Javier

Alguna vez me hiciste el favor de enviarme el codigo de un
trigger para filtrar "palabras no permitidas" (obscenas)
en el insert de una tabla, tomando como referencia otra
tabla donde tendria la lista de palabras incorrectas, este
es el codigo:

CREATE TRIGGER TrInsMensajes ON Mensajes
INSTEAD OF INSERT
AS
SET ANSI_WARNINGS OFF
INSERT Mensajes
SELECT Inserted.MensajeID
, Inserted.Mensaje
, CASE WHEN MAX(Groserias.Groseria) IS NULL THEN 0
ELSE 1
END
FROM Inserted
LEFT JOIN Groserias
ON Inserted.Mensaje LIKE '%'+Groserias.Groseria+'%'
GROUP BY Inserted.MensajeID, Inserted.Mensaje

¿Podria SUBSTITUIR de alguna forma el LIKE con el PATINDEX
o CHARINDEX, algo asi:

ON PATINDEX('+Groserias.Groseria+'%',Inserted.Mensaje) > 0

Lo siguiente se debe a que deseo utilizar los caracteres
comodines, por ejemplo:

PUT_

Gracias y saludos.
 

Leer las respuestas

#1 Javier Loria
26/05/2004 - 20:29 | Informe spam
Hola Isaias:
Claro me parece excelente idea, y queda mucho mejor. Si en la tabla de
Groserias grabas las palabras con comodines deberia funcionar perfectamente
hacer ON con:
==ON PATINDEX('%'+Groserias.Groseria+'%',
Inserted.Mensaje) > 0
== El CASE deberia quedar igual.
Ahora es muy probable que aumenten mucho los "falsos positivos" o se que
se marquen como sospechosos de groserias muchos mensajes que no lo son, pero
definitivamente tienes mas control. Pruebalo a ver si te funciona y
cualquier cosa lo reviso con mas detalle. En todo caso hoy en la noche hago
pruebas :D
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
Isaías escribio:
Hola Javier

Alguna vez me hiciste el favor de enviarme el codigo de un
trigger para filtrar "palabras no permitidas" (obscenas)
en el insert de una tabla, tomando como referencia otra
tabla donde tendria la lista de palabras incorrectas, este
es el codigo:

CREATE TRIGGER TrInsMensajes ON Mensajes
INSTEAD OF INSERT
AS
SET ANSI_WARNINGS OFF
INSERT Mensajes
SELECT Inserted.MensajeID
, Inserted.Mensaje
, CASE WHEN MAX(Groserias.Groseria) IS NULL THEN 0
ELSE 1
END
FROM Inserted
LEFT JOIN Groserias
ON Inserted.Mensaje LIKE '%'+Groserias.Groseria+'%'
GROUP BY Inserted.MensajeID, Inserted.Mensaje

¿Podria SUBSTITUIR de alguna forma el LIKE con el PATINDEX
o CHARINDEX, algo asi:

ON PATINDEX('+Groserias.Groseria+'%',Inserted.Mensaje) > 0

Lo siguiente se debe a que deseo utilizar los caracteres
comodines, por ejemplo:

PUT_

Gracias y saludos.

Preguntas similares