VALIDAR DNI

18/03/2005 - 21:21 por CCALLOQUISPE PALOMINO | Informe spam
HOLA:
he escrito el siguiente trigger:
IF EXISTS (SELECT name FROM sysobjects WHERE name =
'TR_BS_I_ValidarDni_empleado' AND
type = 'TR')
DROP TRIGGER TR_BS_I_ValidarDni_empleado

go

CREATE TRIGGER TR_BS_I_ValidarDni_empleado

on Tsl_Empleado

AFTER INSERT,UPDATE

/*

AUTOR: CCALLOQUISPE PALOMINO RONALD VALENTIN
FECHA CREACION: 13/02/2005
FECHA ACTUALIZACION: NO DISPONIBLE
TEMA: ESTE TRIGGER TIENE COMO OBJETIVO QUE AL ACTUALIZAR EL DNI DEL EMPLEADO
NO SE REPITA CON EL DNI DE OTRO EMPLEADO.

*/

AS

/*

VARIABLES INTERNAS DEL TRIGGER

*/

declare @v_cantidad int
declare @v_dni varchar(10)
select
top 1
@v_dni=inserted.T_Empleado_dni
from inserted

select @v_cantidad=count(*)
from tsl_empleado
where T_empleado_dni=@v_dni

IF @v_cantidad>1

BEGIN


raiserror('EL Nº DNI YA ESTA ASIGNADO A OTRA PERSONA',16,1)
rollback transaction

END

/*
DECLARE @v_cantidad int

select @v_cantidad=count(*)
from tsl_empleado a,inserted b
where

a.T_Empleado_Dni=b.T_Empleado_Dni
and a.T_Empleado_Dni <> ''

IF @v_cantidad>=2

BEGIN


raiserror('EL Nº DNI YA ESTA ASIGNADO A OTRA PERSONA',16,1)
rollback transaction

END
*/

el problema con este trigger es que cuando en un formulario windows ingreso
el numero de dni repetido d eun empleado la validacion se demora mucho tiempo
dando una impresion de que se ha quedado colgado si fueran tan amable de como
puedo modificar este trigger para que sea mas rapido.

chau y muchas gracias por anticipado
CCALLOQUISPE

Preguntas similare

Leer las respuestas

#1 Maxi
18/03/2005 - 21:32 | Informe spam
Hola, porque no usar indices unicos para resolver este problema?


Salu2
Maxi


"CCALLOQUISPE PALOMINO" escribió en el mensaje
news:
HOLA:
he escrito el siguiente trigger:
IF EXISTS (SELECT name FROM sysobjects WHERE name > 'TR_BS_I_ValidarDni_empleado' AND
type = 'TR')
DROP TRIGGER TR_BS_I_ValidarDni_empleado

go

CREATE TRIGGER TR_BS_I_ValidarDni_empleado

on Tsl_Empleado

AFTER INSERT,UPDATE

/*

AUTOR: CCALLOQUISPE PALOMINO RONALD VALENTIN
FECHA CREACION: 13/02/2005
FECHA ACTUALIZACION: NO DISPONIBLE
TEMA: ESTE TRIGGER TIENE COMO OBJETIVO QUE AL ACTUALIZAR EL DNI DEL
EMPLEADO
NO SE REPITA CON EL DNI DE OTRO EMPLEADO.

*/

AS

/*

VARIABLES INTERNAS DEL TRIGGER

*/

declare @v_cantidad int
declare @v_dni varchar(10)
select
top 1
@v_dni=inserted.T_Empleado_dni
from inserted

select @v_cantidad=count(*)
from tsl_empleado
where T_empleado_dni=@v_dni

IF @v_cantidad>1

BEGIN


raiserror('EL Nº DNI YA ESTA ASIGNADO A OTRA PERSONA',16,1)
rollback transaction

END

/*
DECLARE @v_cantidad int

select @v_cantidad=count(*)
from tsl_empleado a,inserted b
where

a.T_Empleado_Dni=b.T_Empleado_Dni
and a.T_Empleado_Dni <> ''

IF @v_cantidad>=2

BEGIN


raiserror('EL Nº DNI YA ESTA ASIGNADO A OTRA PERSONA',16,1)
rollback transaction

END
*/

el problema con este trigger es que cuando en un formulario windows
ingreso
el numero de dni repetido d eun empleado la validacion se demora mucho
tiempo
dando una impresion de que se ha quedado colgado si fueran tan amable de
como
puedo modificar este trigger para que sea mas rapido.

chau y muchas gracias por anticipado
CCALLOQUISPE
Respuesta Responder a este mensaje
#2 Miguel Egea
18/03/2005 - 21:33 | Informe spam
Para este tipo de cosas lo mejor es crear una restrición de unicidad, esto
puede valerte y es instantáneo.

Puedes hacerlo de dos formas
te pongo el ejemplo
create table test (dni char(10))
go
alter table test add constraint uk_test unique (dni)
select * from sysindexes where id=object_id('test')
select * from sysconstraints where id=object_id('test')
go
create table test2 (dni char(10))
create unique index ux_test2 on test2 (dni)
select * from sysindexes where id=object_id('test2')
select * from sysconstraints where id=object_id('test2')

los selects es para que compruebes que no es exactamente lo mismo aunque
ambas cumplen el objetivo que planteas.

Esto por ejemplo serviría.
Create unique index ux_dni unique on Tsl_Empleado (T_Empleado_Dni)

Saludos
Miguel Egea



"CCALLOQUISPE PALOMINO" escribió en el mensaje
news:
HOLA:
he escrito el siguiente trigger:
IF EXISTS (SELECT name FROM sysobjects WHERE name > 'TR_BS_I_ValidarDni_empleado' AND
type = 'TR')
DROP TRIGGER TR_BS_I_ValidarDni_empleado

go

CREATE TRIGGER TR_BS_I_ValidarDni_empleado

on Tsl_Empleado

AFTER INSERT,UPDATE

/*

AUTOR: CCALLOQUISPE PALOMINO RONALD VALENTIN
FECHA CREACION: 13/02/2005
FECHA ACTUALIZACION: NO DISPONIBLE
TEMA: ESTE TRIGGER TIENE COMO OBJETIVO QUE AL ACTUALIZAR EL DNI DEL
EMPLEADO
NO SE REPITA CON EL DNI DE OTRO EMPLEADO.

*/

AS

/*

VARIABLES INTERNAS DEL TRIGGER

*/

declare @v_cantidad int
declare @v_dni varchar(10)
select
top 1
@v_dni=inserted.T_Empleado_dni
from inserted

select @v_cantidad=count(*)
from tsl_empleado
where T_empleado_dni=@v_dni

IF @v_cantidad>1

BEGIN


raiserror('EL Nº DNI YA ESTA ASIGNADO A OTRA PERSONA',16,1)
rollback transaction

END

/*
DECLARE @v_cantidad int

select @v_cantidad=count(*)
from tsl_empleado a,inserted b
where

a.T_Empleado_Dni=b.T_Empleado_Dni
and a.T_Empleado_Dni <> ''

IF @v_cantidad>=2

BEGIN


raiserror('EL Nº DNI YA ESTA ASIGNADO A OTRA PERSONA',16,1)
rollback transaction

END
*/

el problema con este trigger es que cuando en un formulario windows
ingreso
el numero de dni repetido d eun empleado la validacion se demora mucho
tiempo
dando una impresion de que se ha quedado colgado si fueran tan amable de
como
puedo modificar este trigger para que sea mas rapido.

chau y muchas gracias por anticipado
CCALLOQUISPE

Respuesta Responder a este mensaje
#3 CCALLOQUISPE PALOMINO
21/03/2005 - 18:07 | Informe spam
HOLA:

mucha gracias por tu respuesta, pero si yo inserto
dos registros como el dni, seguro el sql me va botar un
error yo quiero personalizar ese error.

muchas gracias por tu respuesta


"Miguel Egea" wrote:

Para este tipo de cosas lo mejor es crear una restrición de unicidad, esto
puede valerte y es instantáneo.

Puedes hacerlo de dos formas
te pongo el ejemplo
create table test (dni char(10))
go
alter table test add constraint uk_test unique (dni)
select * from sysindexes where id=object_id('test')
select * from sysconstraints where id=object_id('test')
go
create table test2 (dni char(10))
create unique index ux_test2 on test2 (dni)
select * from sysindexes where id=object_id('test2')
select * from sysconstraints where id=object_id('test2')

los selects es para que compruebes que no es exactamente lo mismo aunque
ambas cumplen el objetivo que planteas.

Esto por ejemplo serviría.
Create unique index ux_dni unique on Tsl_Empleado (T_Empleado_Dni)

Saludos
Miguel Egea



"CCALLOQUISPE PALOMINO" escribió en el mensaje
news:
> HOLA:
> he escrito el siguiente trigger:
> IF EXISTS (SELECT name FROM sysobjects WHERE name > > 'TR_BS_I_ValidarDni_empleado' AND
> type = 'TR')
> DROP TRIGGER TR_BS_I_ValidarDni_empleado
>
> go
>
> CREATE TRIGGER TR_BS_I_ValidarDni_empleado
>
> on Tsl_Empleado
>
> AFTER INSERT,UPDATE
>
> /*
>
> AUTOR: CCALLOQUISPE PALOMINO RONALD VALENTIN
> FECHA CREACION: 13/02/2005
> FECHA ACTUALIZACION: NO DISPONIBLE
> TEMA: ESTE TRIGGER TIENE COMO OBJETIVO QUE AL ACTUALIZAR EL DNI DEL
> EMPLEADO
> NO SE REPITA CON EL DNI DE OTRO EMPLEADO.
>
> */
>
> AS
>
> /*
>
> VARIABLES INTERNAS DEL TRIGGER
>
> */
>
> declare @v_cantidad int
> declare @v_dni varchar(10)
> select
> top 1
> @v_dni=inserted.T_Empleado_dni
> from inserted
>
> select @v_cantidad=count(*)
> from tsl_empleado
> where T_empleado_dni=@v_dni
>
> IF @v_cantidad>1
>
> BEGIN
>
>
> raiserror('EL Nº DNI YA ESTA ASIGNADO A OTRA PERSONA',16,1)
> rollback transaction
>
> END
>
> /*
> DECLARE @v_cantidad int
>
> select @v_cantidad=count(*)
> from tsl_empleado a,inserted b
> where
>
> a.T_Empleado_Dni=b.T_Empleado_Dni
> and a.T_Empleado_Dni <> ''
>
> IF @v_cantidad>=2
>
> BEGIN
>
>
> raiserror('EL Nº DNI YA ESTA ASIGNADO A OTRA PERSONA',16,1)
> rollback transaction
>
> END
> */
>
> el problema con este trigger es que cuando en un formulario windows
> ingreso
> el numero de dni repetido d eun empleado la validacion se demora mucho
> tiempo
> dando una impresion de que se ha quedado colgado si fueran tan amable de
> como
> puedo modificar este trigger para que sea mas rapido.
>
> chau y muchas gracias por anticipado
> CCALLOQUISPE
>




Respuesta Responder a este mensaje
#4 CCALLOQUISPE PALOMINO
21/03/2005 - 18:11 | Informe spam
HOLA:

Muchas gracias maxi, pero no lo puedo hacer con un trigger, porque en oracle
hacia lo mismo y no era tan lento como en sql server y todavia es mas facil
escribir un trigger en oracle que en sql.
claro es mi opinion, tu crees que la siguiente version de sql server este
mejor preparado los trigger, pero la pregunta porque se demora mi trigger,
eso quiero saber si solo hace una consulta.


"Maxi" wrote:

Hola, porque no usar indices unicos para resolver este problema?


Salu2
Maxi


"CCALLOQUISPE PALOMINO" escribió en el mensaje
news:
> HOLA:
> he escrito el siguiente trigger:
> IF EXISTS (SELECT name FROM sysobjects WHERE name > > 'TR_BS_I_ValidarDni_empleado' AND
> type = 'TR')
> DROP TRIGGER TR_BS_I_ValidarDni_empleado
>
> go
>
> CREATE TRIGGER TR_BS_I_ValidarDni_empleado
>
> on Tsl_Empleado
>
> AFTER INSERT,UPDATE
>
> /*
>
> AUTOR: CCALLOQUISPE PALOMINO RONALD VALENTIN
> FECHA CREACION: 13/02/2005
> FECHA ACTUALIZACION: NO DISPONIBLE
> TEMA: ESTE TRIGGER TIENE COMO OBJETIVO QUE AL ACTUALIZAR EL DNI DEL
> EMPLEADO
> NO SE REPITA CON EL DNI DE OTRO EMPLEADO.
>
> */
>
> AS
>
> /*
>
> VARIABLES INTERNAS DEL TRIGGER
>
> */
>
> declare @v_cantidad int
> declare @v_dni varchar(10)
> select
> top 1
> @v_dni=inserted.T_Empleado_dni
> from inserted
>
> select @v_cantidad=count(*)
> from tsl_empleado
> where T_empleado_dni=@v_dni
>
> IF @v_cantidad>1
>
> BEGIN
>
>
> raiserror('EL Nº DNI YA ESTA ASIGNADO A OTRA PERSONA',16,1)
> rollback transaction
>
> END
>
> /*
> DECLARE @v_cantidad int
>
> select @v_cantidad=count(*)
> from tsl_empleado a,inserted b
> where
>
> a.T_Empleado_Dni=b.T_Empleado_Dni
> and a.T_Empleado_Dni <> ''
>
> IF @v_cantidad>=2
>
> BEGIN
>
>
> raiserror('EL Nº DNI YA ESTA ASIGNADO A OTRA PERSONA',16,1)
> rollback transaction
>
> END
> */
>
> el problema con este trigger es que cuando en un formulario windows
> ingreso
> el numero de dni repetido d eun empleado la validacion se demora mucho
> tiempo
> dando una impresion de que se ha quedado colgado si fueran tan amable de
> como
> puedo modificar este trigger para que sea mas rapido.
>
> chau y muchas gracias por anticipado
> CCALLOQUISPE



Respuesta Responder a este mensaje
#5 Maxi
21/03/2005 - 18:47 | Informe spam
Hola, yo no dije que lo hagas con un trigger, sino que uses indices.

Y te comento que los triggers funcionan muy pero muy bien en sql2k, el tema
es que deben estar bien desarrollados


Salu2
Maxi


"CCALLOQUISPE PALOMINO" escribió en el mensaje
news:
HOLA:

Muchas gracias maxi, pero no lo puedo hacer con un trigger, porque en
oracle
hacia lo mismo y no era tan lento como en sql server y todavia es mas
facil
escribir un trigger en oracle que en sql.
claro es mi opinion, tu crees que la siguiente version de sql server este
mejor preparado los trigger, pero la pregunta porque se demora mi trigger,
eso quiero saber si solo hace una consulta.


"Maxi" wrote:

Hola, porque no usar indices unicos para resolver este problema?


Salu2
Maxi


"CCALLOQUISPE PALOMINO" escribió en el mensaje
news:
> HOLA:
> he escrito el siguiente trigger:
> IF EXISTS (SELECT name FROM sysobjects WHERE name >> > 'TR_BS_I_ValidarDni_empleado' AND
> type = 'TR')
> DROP TRIGGER TR_BS_I_ValidarDni_empleado
>
> go
>
> CREATE TRIGGER TR_BS_I_ValidarDni_empleado
>
> on Tsl_Empleado
>
> AFTER INSERT,UPDATE
>
> /*
>
> AUTOR: CCALLOQUISPE PALOMINO RONALD VALENTIN
> FECHA CREACION: 13/02/2005
> FECHA ACTUALIZACION: NO DISPONIBLE
> TEMA: ESTE TRIGGER TIENE COMO OBJETIVO QUE AL ACTUALIZAR EL DNI DEL
> EMPLEADO
> NO SE REPITA CON EL DNI DE OTRO EMPLEADO.
>
> */
>
> AS
>
> /*
>
> VARIABLES INTERNAS DEL TRIGGER
>
> */
>
> declare @v_cantidad int
> declare @v_dni varchar(10)
> select
> top 1
> @v_dni=inserted.T_Empleado_dni
> from inserted
>
> select @v_cantidad=count(*)
> from tsl_empleado
> where T_empleado_dni=@v_dni
>
> IF @v_cantidad>1
>
> BEGIN
>
>
> raiserror('EL Nº DNI YA ESTA ASIGNADO A OTRA PERSONA',16,1)
> rollback transaction
>
> END
>
> /*
> DECLARE @v_cantidad int
>
> select @v_cantidad=count(*)
> from tsl_empleado a,inserted b
> where
>
> a.T_Empleado_Dni=b.T_Empleado_Dni
> and a.T_Empleado_Dni <> ''
>
> IF @v_cantidad>=2
>
> BEGIN
>
>
> raiserror('EL Nº DNI YA ESTA ASIGNADO A OTRA PERSONA',16,1)
> rollback transaction
>
> END
> */
>
> el problema con este trigger es que cuando en un formulario windows
> ingreso
> el numero de dni repetido d eun empleado la validacion se demora mucho
> tiempo
> dando una impresion de que se ha quedado colgado si fueran tan amable
> de
> como
> puedo modificar este trigger para que sea mas rapido.
>
> chau y muchas gracias por anticipado
> CCALLOQUISPE



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida