Lab 16-Script para El Uso de Funciones y Cursores
Lab 16-Script para El Uso de Funciones y Cursores
Lab 16-Script para El Uso de Funciones y Cursores
EJERCICIOS DESARROLLADOS
1.
MODELADO DE DATOS
Pgina 1
3. CREACIN DEL OBJETO REUNIONES -- Creacion de la Tabla "Reuniones" use BDREUNIONES go create table dbo.Reuniones ( ReunionID int identity(1, 1) not null, Asunto varchar(50) not null, Lugar varchar(50) not null, Inicio DateTime null, Fin DateTime null, DiaEntero bit not null, Privado bit not null, Importancia varchar(10) not null, Comentarios nvarchar(3800) null, CaracteristicaID int not null, UsuarioID char(10) not null ) on [Primary]
Pgina 2
4. CREACIN DEL OBJETO CARACTERISTICAS -- Creacion de la Tabla Caracteristicas use BDREUNIONES go create table dbo.caracteristicas ( CaracteristicaID int identity(1, 1) not null, Descripcion varchar(50) not null ) on [Primary] go 5. CREACIN DEL OBJETO USUARIOS -- Creacion de la Tabla Usuarios use BDREUNIONES go create table Usuarios ( UsuarioID char(10) not null, Nombre varchar(50) not null, Apellido varchar(50) not null, FchNacimiento DateTime not null, Email varchar(50) not null, Contrasea varchar(50) not null, Empresa varchar(50) null, Telefono char(12) null, Perfil text null, MostrarPerfil bit not null, FchInscripcion DateTime not null ) on [Primary] 6. FUNCION PARA GENERAR INDENTIFICADOR DE USUARIO -- Funcion para generar Identificador de Usuario use BDREUNIONES go if OBJECT_ID('dbo.GenerarUsuario', 'FN')is not null drop function dbo.GenerarUsuario go create function GenerarUsuario(@Hoy DateTime) returns char(10) AS Begin declare @NuevoID char(10) declare @Cuenta integer declare @Existe Bit declare @Prefijo char(08) set @Cuenta=1 set @Existe=1 set @Prefijo=Convert(varchar(04), datepart(yyyy, @Hoy))+ MG. LUIS BOY CHAVIL Pgina 3
Right('00'+Convert(varchar(02), datepart(mm, @Hoy)), 2)+ Right('00'+Convert(varchar(02), datepart(dd, @Hoy)), 2) declare cursor_ID CURSOR for select UsuarioID from Usuarios where UsuarioID like @Prefijo+'%' open cursor_ID while (@Existe=1) Begin FETCH NEXT from cursor_ID into @NuevoID if (@NuevoID=@Prefijo+Right('0'+Convert(varchar(2), @Cuenta), 2)) set @Cuenta=@Cuenta+1 else Begin set @Existe=0 set @NuevoID=@Prefijo+Right('0'+Convert(varchar(02), @Cuenta), 2) End End close cursor_ID deallocate cursor_ID return @NuevoID End go 7. CREACIN DE NDICES -- Creacion de restricciones (Tabla de Indices de Reuniones) use BDREUNIONES go alter table [dbo].[Reuniones] with nocheck add CONSTRAINT [PK_Reuniones] Primary key clustered ( ReunionID ) on [Primary] 8. NDICE DE CARACTERISTICAS -- Indice de la Tabla Caracteristicas use BDREUNIONES go alter table [dbo].[Caracteristicas] with nocheck add CONSTRAINT [PK_Caracteristicas] Primary key clustered ( CaracteristicaID ) on [Primary]
Pgina 4
9. NDICE DE USUARIOS -- Indice para los Usuarios use BDREUNIONES go alter table [dbo].[Usuarios] with nocheck add CONSTRAINT [PK_Usuarios] Primary key clustered ( usuarioID ) on [Primary] 10. RESTRICCIONES PARA REUNIONES -- Restricciones para la tabla Reuniones use BDREUNIONES go alter table dbo.Reuniones add CONSTRAINT [DF_Reunion_DiaEntero] default(0) for [DiaEntero], CONSTRAINT [DF_Reunion_Privado] default(1) for [Privado], CONSTRAINT [DF_Reunion_importancia] default('Normal') for [Importancia] 11. RESTRICCIONES PARA USUARIOS -- Restricciones para Usuarios use BDREUNIONES go Alter table dbo.Usuarios ADD CONSTRAINT [DF_Usuarios_UsuarioID] default (dbo.GenerarUsuario(GetDate())) for [UsuarioID], CONSTRAINT [DF_Usuarios_MostrarPerfil] default (1) for [MostrarPerfil], CONSTRAINT [DF_Usuarios_FchInscripcion] default (GetDate()) for [FchInscripcion] 12. INTEGRIDAD DE LA REFERENCIA -- Integridad de la Referencia use BDREUNIONES go alter table dbo.Reuniones ADD CONSTRAINT [DF_Reunion_Caracteristicas] FOREIGN KEY ( CaracteristicaID ) REFERENCES [dbo].[Caracteristicas]([CaracteristicaID]), CONSTRAINT [DF_Reunion_Usuarios] FOREIGN KEY ( UsuarioID ) REFERENCES dbo.usuarios ( MG. LUIS BOY CHAVIL Pgina 5
13. PROCEDIMIENTO ALMACENADO PARA CONTROL DE USUARIOS -- SP: para Controlar Usuarios use BDREUNIONES go create procedure ListadoReuniones ( @ReunionID int ) AS Begin select R.*, C.descripcion as Descripcion, RTRIM(U.Nombre)+' '+U.Apellido as Usuario from Reuniones R inner join Caracteristicas C on R.CaracteristicaID=C.CaracteristicaID inner join Usuarios U on R.UsuarioID=U.UsuarioID where R.ReunionID=@ReunionID End go
Pgina 6