resolver problema con un trigger

18/11/2004 - 10:04 por Arturo Cabezón | Informe spam
Hola grupo
Me gustaría resolver el problema que sigue con un trigger
Tengo que dar de alta un registro que tiene un campo texto bastante extenso,
y a la vez me gustaría en otra tabla dar de alta tantos registros como
palabras tiene el campo antedicho.
Dicho de otra forma: en una tabla CLIENTES tengo un campo OBSERVACIONES,
cuando agrego 1 nuevo registro quiero que en otra tabla PALABRAS se de de
alta automaticamente tantos registros como palabras tiene el campo
CLIENTES->OBSERVACIONES.
Y, como dije, sería deseable hacerlo con un desencadenador; claro esta que
podría hacerlo desde el codigo de mi programa... Pero... Berrinches son
Berrinches

Gracias grupo!
 

Leer las respuestas

#1 Javier Loria
18/11/2004 - 19:40 | Informe spam
Hola:
Este tipo de manejo de texto en SQL es muy lento, no te lo recomiendo de
codigo en un trigger.
En todo caso si usas una funcion como la que sigue, podrias hacerlo:
CREATE FUNCTION dbo.QuiebraEnPalabras(@Texto VARCHAR(7999))
RETURNS @Palabras TABLE(
Posicion INT NOT NULL PRIMARY KEY
, Palabra VARCHAR(25) NOT NULL )
AS
BEGIN
DECLARE @I INT
SET @I=1

WHILE REPLACE(@Texto , ' ' , ' ')<>@Texto
BEGIN
SET @Texto=REPLACE(@Texto , ' ' , ' ')
END

SET @Texto=RTRIM(LTRIM(@Texto))+' '

WHILE CHARINDEX(' ',@Texto)>0
BEGIN
INSERT @Palabras
SELECT @I, LEFT(@Texto,CHARINDEX(' ',@Texto)-1)

SET @Texto=SUBSTRING(@Texto,CHARINDEX(' ',@Texto)+1,LEN(@Texto))
SET @I=@I+1
END
RETURN
END
GO
SELECT *
FROM dbo.QuiebraEnPalabras('Había una vez una viejita que tenía dos hijos:
uno vivo y otro tonto.')
Esta funcion la puedes usar como "guia" de codigo dentro del Trigger,
solo que en esta ocasion en lugar de un valor(@Texto) tienes una columna en
Inserted.
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

"Arturo Cabezón" <Arturo wrote in message
news:
Hola grupo
Me gustaría resolver el problema que sigue con un trigger
Tengo que dar de alta un registro que tiene un campo texto bastante


extenso,
y a la vez me gustaría en otra tabla dar de alta tantos registros como
palabras tiene el campo antedicho.
Dicho de otra forma: en una tabla CLIENTES tengo un campo OBSERVACIONES,
cuando agrego 1 nuevo registro quiero que en otra tabla PALABRAS se de de
alta automaticamente tantos registros como palabras tiene el campo
CLIENTES->OBSERVACIONES.
Y, como dije, sería deseable hacerlo con un desencadenador; claro esta que
podría hacerlo desde el codigo de mi programa... Pero... Berrinches son
Berrinches

Gracias grupo!

Preguntas similares