base de datos con triggers
Publicado por rodrigo (1 intervención) el 27/07/2007 20:06:24
como hago un
1)Crear una Base de Datos Llamada PRUEBAN3
2)En dicha B.D. crear la tabla Alumnos con la siguiente estructura
i.AlumnoRut: Integer, PK
ii.AlumnoDV: char(1)
iii.AlumnoNombres: char(50)
iv.AlumnoApellidos: char(50)
3)Crear un TRIGGER INSTEAD OF para la operación INSERT de la tabla anterior y este debe hacer lo siguiente
a. se Debe Utilizar un cursor para recorrer la tabla INSERTED
b.Para cada registro de dicha tabla, Calcule UD. El digito verificador correspondiente según el RUT
c.Insertar definitivamente los datos en la Tabla Alumnos con el valor calculado para AlumnoDV.
...yo hasta ahora he hecho lo siguiente ,,pero me sale un error al insertar valores a mi tabla alumnos...
este es..
create database prueban3
use database prueban3
create table alumnos
(
alumno_rut integer not null,
alumno_dv char(1) ,
alumno_nombres char(50),
alumno_apellidos char(50),
constraint pk_alumno_rut primary key(alumno_rut)
)
create trigger Rodrigo on alumnos
instead of insert
as
begin
declare @RUT int
declare @RUTTEMP int
declare @RUTDIGI int
declare @ACUM int
declare @REST int
declare @CONT int
declare @DV char(1)
declare indice CURSOR FOR select alumno_dv,alumno_rut from INSERTED
open indice
fetch next from indice into @DV,@RUT
while @@fetch_status=0
begin
set @RUT = 1
WHILE (@RUT<10000000)
BEGIN
set @CONT = 2
set @ACUM = 0
set @RUTTEMP = @RUT
WHILE (@RUTTEMP>0)
BEGIN
set @RUTDIGI = @RUTTEMP - (@RUTTEMP/10)*10
set @RUTTEMP = @RUTTEMP/10
set @ACUM = @ACUM + @RUTDIGI*@CONT
set @CONT = @CONT + 1
IF (@CONT>7)
BEGIN
set @CONT = 2
END
END
set @REST = 11 - @ACUM % 11
IF @REST = 1
BEGIN
SET @DV = '1'
END
IF @REST = 2
BEGIN
SET @DV = '2'
END
IF @REST = 3
BEGIN
SET @DV = '3'
END
IF @REST = 4
BEGIN
SET @DV = '4'
END
IF @REST = 5
BEGIN
SET @DV = '5'
END
IF @REST = 6
BEGIN
SET @DV = '6'
END
IF @REST = 7
BEGIN
SET @DV = '7'
END
IF @REST = 8
BEGIN
SET @DV = '8'
END
IF @REST = 9
BEGIN
SET @DV = '9'
END
IF @REST = 10
BEGIN
SET @DV = 'K'
END
IF @REST = 11
BEGIN
SET @DV = '0'
end
print('se ha desencadenado un trigger')
insert into alumnos (alumno_dv) values (@DV)
end
fetch next from indice into @DV,@RUT
end
end
go
insert into alumnos(alumno_rut,alumno_nombres,alumno_apellidos) values (15276486 ,'rodrigo','salas')
1)Crear una Base de Datos Llamada PRUEBAN3
2)En dicha B.D. crear la tabla Alumnos con la siguiente estructura
i.AlumnoRut: Integer, PK
ii.AlumnoDV: char(1)
iii.AlumnoNombres: char(50)
iv.AlumnoApellidos: char(50)
3)Crear un TRIGGER INSTEAD OF para la operación INSERT de la tabla anterior y este debe hacer lo siguiente
a. se Debe Utilizar un cursor para recorrer la tabla INSERTED
b.Para cada registro de dicha tabla, Calcule UD. El digito verificador correspondiente según el RUT
c.Insertar definitivamente los datos en la Tabla Alumnos con el valor calculado para AlumnoDV.
...yo hasta ahora he hecho lo siguiente ,,pero me sale un error al insertar valores a mi tabla alumnos...
este es..
create database prueban3
use database prueban3
create table alumnos
(
alumno_rut integer not null,
alumno_dv char(1) ,
alumno_nombres char(50),
alumno_apellidos char(50),
constraint pk_alumno_rut primary key(alumno_rut)
)
create trigger Rodrigo on alumnos
instead of insert
as
begin
declare @RUT int
declare @RUTTEMP int
declare @RUTDIGI int
declare @ACUM int
declare @REST int
declare @CONT int
declare @DV char(1)
declare indice CURSOR FOR select alumno_dv,alumno_rut from INSERTED
open indice
fetch next from indice into @DV,@RUT
while @@fetch_status=0
begin
set @RUT = 1
WHILE (@RUT<10000000)
BEGIN
set @CONT = 2
set @ACUM = 0
set @RUTTEMP = @RUT
WHILE (@RUTTEMP>0)
BEGIN
set @RUTDIGI = @RUTTEMP - (@RUTTEMP/10)*10
set @RUTTEMP = @RUTTEMP/10
set @ACUM = @ACUM + @RUTDIGI*@CONT
set @CONT = @CONT + 1
IF (@CONT>7)
BEGIN
set @CONT = 2
END
END
set @REST = 11 - @ACUM % 11
IF @REST = 1
BEGIN
SET @DV = '1'
END
IF @REST = 2
BEGIN
SET @DV = '2'
END
IF @REST = 3
BEGIN
SET @DV = '3'
END
IF @REST = 4
BEGIN
SET @DV = '4'
END
IF @REST = 5
BEGIN
SET @DV = '5'
END
IF @REST = 6
BEGIN
SET @DV = '6'
END
IF @REST = 7
BEGIN
SET @DV = '7'
END
IF @REST = 8
BEGIN
SET @DV = '8'
END
IF @REST = 9
BEGIN
SET @DV = '9'
END
IF @REST = 10
BEGIN
SET @DV = 'K'
END
IF @REST = 11
BEGIN
SET @DV = '0'
end
print('se ha desencadenado un trigger')
insert into alumnos (alumno_dv) values (@DV)
end
fetch next from indice into @DV,@RUT
end
end
go
insert into alumnos(alumno_rut,alumno_nombres,alumno_apellidos) values (15276486 ,'rodrigo','salas')
Valora esta pregunta


0