SQL - Ayuda, INSERT con trigger!!!!

 
Vista:

Ayuda, INSERT con trigger!!!!

Publicado por Christian D. (6 intervenciones) el 17/05/2005 00:17:30
Hola, necesito validar mediante un trigger en SQL Server 2000 que el largo de un determinado campo no supere por los 1000 caracteres, no puedo hacerlo por código del sw ya q' ya se encuentra programado y compilado, así que lo estoy haciendo mediante un trigger. El campo está definido en la base de datos como varchar de 1000
Lo que estoy probando es es un trigger que hace lo siguiente, si el valor que se quiere insertar en la tabla supera el largo máximo permitido (1000 caracteres) realiza un ROLLBACK de la transacción.:

IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'muylargo' AND type = 'TR')
DROP TRIGGER muylargo
GO

CREATE TRIGGER muylargo ON discado FOR INSERT
AS

SET ANSI_WARNINGS OFF
DECLARE @rc AS INT
SET @rc = (select len(inserted.observaciones) from inserted )
IF @rc > 1000
BEGIN
ROLLBACK TRAN
END

Pero no funciona ya que cualquier valor superior a 1000 que se encuentre en la condición "IF @rc > 1000" del trigger aparece esto: "string or binary data would be truncated". En el fondo no está tomando en cuenta el trigger.Es lo mismo que aparece si no utilizo el trigger, sin embargo, si en la condición del trigger pongo "IF @rc > 900" el trigger funciona sin problemas. Funciona bien para un valor en la condición siempre menor que el máximo definido del campo.

Por favor necesito que alguien me ayude con esto!!!.
Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda, INSERT con trigger!!!!

Publicado por Isaías Islas (5072 intervenciones) el 17/05/2005 01:37:21
Deberias cambiarlo por un trigger de tipo INSTEAD OFF

INSTEAD OF

Especifica que se ejecuta el desencadenador en vez de la instrucción SQL desencadenadora, por lo que se suplantan las acciones de las instrucciones desencadenadoras.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda, INSERT con trigger!!!!

Publicado por Christian D. (6 intervenciones) el 17/05/2005 16:33:08
Gracias Isaías,
Probé pero tampoco funcionó. Encontré además que se ejecuta un store procedure para realizar el insert.:

CREATE PROCEDURE [spInsertaxx]
(@xx_1 [varchar](50),
@xx_2 [varchar](50),
@xx_3 [datetime],
@xx_4 [datetime],
@xx_5 [datetime],
@xx_6 [varchar](50),
@xx_7 [varchar](50),
@xx_8 [varchar](255),
@xx_9 [varchar](1000),
@xx_10 [varchar](50),
@xx_11 [varchar](50),
@Observaciones_12 [varchar](1000))
AS INSERT INTO [Agentes].[dbo].[tablaxx]
( [xx1],
[xx2],
[xx3],
[xx4],
[xx5],
[xx6],
[xx7],
[xx8],
[xx9],
[xx10],
[xx11],
[Observaciones])
VALUES
( @xx_1,
@xx_2,
@xx_3,
@xx_4,
@xx_5,
@xx_6,
@xx_7,
@xx_8,
@xx_9,
@xx_10,
@xx_11,
@Observaciones_12)
GO

Así que la aplicación debe hacer un llamado a este procedimiento pasándole las variables para realizar el insert.
El campo de la tablaxx que presenta problemas es el de observaciones, ya que es el único que ingresan los usuarios, y maliciosamente se dieron cuenta que ingresando muchos caracteres (más de 1000) la aplicación se cae.
Por este procedimiento almacenado el trigger no se ejecuta??

Qué puedo hacer?
Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda, INSERT con trigger!!!!

Publicado por Isaías Islas (5072 intervenciones) el 17/05/2005 17:05:49
Bueno, la regla dice que el 99% de las VALIDACIONES debe hacerlas el FRONT, modifica tu aplicativo y que sea este quien verifique la longitud del campo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda, INSERT con trigger!!!!

Publicado por Christian D. (6 intervenciones) el 17/05/2005 17:15:52
No tengo acceso al código fuente, es una aplicación que lleva aproximadamente un año y medio funcionando, yo llegué hace poco a trababar en esta empresa, la semana pasada recién pude saber porque se caía la aplicación. La única manera que veo de arreglar el problema es esta (realizando algún tipo de validación antes de insertar los valores en la tabla), ya que no me puedo meter al código de la aplicación para corregirlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Ayuda, INSERT con trigger!!!!

Publicado por emerson palacios (11 intervenciones) el 29/05/2005 23:07:18
no se si sea esto amigo. pero haz tratando de utilizar un tipo de dato long para tu variable @rc
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda, INSERT con trigger!!!!

Publicado por Isaías Islas (5072 intervenciones) el 17/05/2005 17:56:18
En tu base de datos, ¿Tienes el fuente de este store procedure?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda, INSERT con trigger!!!!

Publicado por Christian D. (6 intervenciones) el 17/05/2005 18:34:38
Este es:

CREATE PROCEDURE [spInsertaDiscadoManual]
(@Agente_1 [varchar](50),
@NumeroDiscado_2 [varchar](50),
@FechaHoraInicio_3 [datetime],
@FechaHoraWrapUp_4 [datetime],
@FechaHoraFin_5 [datetime],
@DuracionConversacion_6 [varchar](50),
@DuracionWrapUp_7 [varchar](50),
@Grabacion_8 [varchar](255),
@DescripcionGrabacion_9 [varchar](1000),
@Troncal_10 [varchar](50),
@Status_11 [varchar](50),
@Observaciones_12 [varchar](1000))
AS INSERT INTO [Agentes].[dbo].[DiscadoManual]
( [Agente],
[NumeroDiscado],
[FechaHoraInicio],
[FechaHoraWrapUp],
[FechaHoraFin],
[DuracionConversacion],
[DuracionWrapUp],
[Grabacion],
[DescripcionGrabacion],
[Troncal],
[Status],
[Observaciones])
VALUES
( @Agente_1,
@NumeroDiscado_2,
@FechaHoraInicio_3,
@FechaHoraWrapUp_4,
@FechaHoraFin_5,
@DuracionConversacion_6,
@DuracionWrapUp_7,
@Grabacion_8,
@DescripcionGrabacion_9,
@Troncal_10,
@Status_11,
@Observaciones_12)
GO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda, INSERT con trigger!!!!

Publicado por Isaías Islas (5072 intervenciones) el 17/05/2005 19:40:19
Agrega una validación antes del INSERT, te anexo la modificacion

ALTER PROCEDURE [spInsertaDiscadoManual]
(@Agente_1 [varchar](50),
@NumeroDiscado_2 [varchar](50),
@FechaHoraInicio_3 [datetime],
@FechaHoraWrapUp_4 [datetime],
@FechaHoraFin_5 [datetime],
@DuracionConversacion_6 [varchar](50),
@DuracionWrapUp_7 [varchar](50),
@Grabacion_8 [varchar](255),
@DescripcionGrabacion_9 [varchar](1000),
@Troncal_10 [varchar](50),
@Status_11 [varchar](50),
@Observaciones_12 [varchar](1000))
AS

-- Inicia modificación
SET NOCOUNT ON
IF LEN(@Observaciones_12) > 1000
RETURN(0)
-- Termina modificación

INSERT INTO [Agentes].[dbo].[DiscadoManual]
( [Agente],
[NumeroDiscado],
[FechaHoraInicio],
[FechaHoraWrapUp],
[FechaHoraFin],
[DuracionConversacion],
[DuracionWrapUp],
[Grabacion],
[DescripcionGrabacion],
[Troncal],
[Status],
[Observaciones])
VALUES
( @Agente_1,
@NumeroDiscado_2,
@FechaHoraInicio_3,
@FechaHoraWrapUp_4,
@FechaHoraFin_5,
@DuracionConversacion_6,
@DuracionWrapUp_7,
@Grabacion_8,
@DescripcionGrabacion_9,
@Troncal_10,
@Status_11,
@Observaciones_12)
GO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda, INSERT con trigger!!!!

Publicado por Christian D. (6 intervenciones) el 17/05/2005 23:37:08
Isaías,
Probé el ALTER PROCEDURE, pero de todas la aplicación se cae al ingeresar más de 1000 caracteres en el campo observaciones.
Qué más puedo hacer?

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda, INSERT con trigger!!!!

Publicado por Isaías Islas (5072 intervenciones) el 18/05/2005 01:04:21
Amigo, estonces la que esta "tronando" es tu aplicación y no la BASE DE DATOS, como no tienes los fuentes de dicho aplicativo, pues va a estar dificil que lo pueda solucionar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda, INSERT con trigger!!!!

Publicado por Christian D. (6 intervenciones) el 18/05/2005 05:57:49
Gracias Isaías, quería agotar todas las posibilidades para poder corregir este problema con comprobaciones de la base de datos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar