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!

Preguntas similare

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!
Respuesta Responder a este mensaje
#2 Arturo Cabezón
20/12/2004 - 19:35 | Informe spam
Javier, hace unos cuantos días he planteado una duda con respecto a como
(utilizando triggers) partir un texto y tirarlo en una tabla secundaria.
(18/Nov/04)
He llevado tu respuesta de un lado para el otro tratando de resolverlo con
procedimientos (pues tengo SQL7) sin éxito.
Me puedes dar nuevamente una mano?
Gracias
Arturo


"Javier Loria" wrote:

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!



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida