89 - Tipo de dato definido por el usuario (valores predeterminados) |
Un comercio almacena los datos de sus empleados en una tabla denominada "empleados" y en otra llamada "clientes" los datos de sus clientes". 1- Elimine ambas tablas, si existen: if object_id ('empleados') is not null drop table empleados; if object_id ('clientes') is not null drop table clientes; 2- Defina un nuevo tipo de dato llamado "tipo_año". Primero debe eliminarlo, si existe, para volver a crearlo. Para ello emplee esta sentencia que explicaremos en el siguiente capítulo: if exists (select *from systypes where name = 'tipo_año') exec sp_droptype tipo_año; 3- Cree un tipo de dato definido por el usuario llamado "tipo_año" basado en el tipo "int" que permita valores nulos: exec sp_addtype tipo_año, 'int','null'; 4- Ejecute el procedimiento almacenado "sp_help" junto al nombre del tipo de dato definido anteriormente para obtener información del mismo: exec sp_help tipo_año; 5- Cree la tabla "empleados" con 3 campos: documento (char de 8), nombre (30 caracteres) y añoingreso (tipo_año): create table empleados( documento char(8), nombre varchar(30), añoingreso tipo_año ); 6- Elimine el valor predeterminado "VP_añoactual" si existe: if object_id ('VP_añoactual') is not null drop default VP_añoactual; 7- Cree el valor predeterminado "VP_añoactual" que almacene el año actual: create default VP_añoactual as datepart(year,getdate()); 8- Asocie el valor predeterminado al tipo de datos "tipo_año" especificando que solamente se aplique a los futuros campos de este tipo: exec sp_bindefault VP_añoactual, 'tipo_año', 'futureonly'; 9- Vea si se aplicó a la tabla empleados: exec sp_helpconstraint empleados; No se aplicó porque especificamos la opción "futureonly": 10- Cree la tabla "clientes" con 3 campos: nombre (30 caracteres), añoingreso (tipo_año) y domicilio (30 caracteres): create table clientes( documento char(8), nombre varchar(30), añoingreso tipo_año ); 11- Vea si se aplicó la regla en la nueva tabla: exec sp_helpconstraint clientes; Si se aplicó. 12- Ingrese un registro con valores por defecto en la tabla "empleados" y vea qué se almacenó en "añoingreso": insert into empleados default values; select * from empleados; Se almacenó "null" porque en esta tabla no se aplica el valor predeterminado. 13- Ingrese en la tabla "clientes" un registro con valores por defecto y recupere los registros: insert into clientes default values; select * from clientes; Se almacenó el valor predeterminado. 14- Elimine el valor predeterminado llamado "VP_año2000", si existe: if object_id ('VP_año2000') is not null drop default Vp_año2000; 15- Cree un valor predeterminado llamado "VP_año2000" con el valor 2000: create default VP_año2000 as 2000; 16- Asócielo al tipo de dato definido sin especificar "futureonly": exec sp_bindefault VP_año2000, 'tipo_año'; 17- Verifique que se asoció a la tabla "empleados": exec sp_helpconstraint empleados; 18- Verifique que reemplazó al valor predeterminado anterior en la tabla "clientes": exec sp_helpconstraint clientes; 18- Ingrese un registro en ambas tablas con valores por defecto y vea qué se almacenó en el año de ingreso: insert into empleados default values; select * from empleados; insert into clientes default values; select * from clientes; 19- Vea la información del tipo de dato: exec sp_help tipo_año; La columna que hace referencia al valor predeterminado asociado muestra "VP_año2000". 20- Intente agregar a la tabla "empleados" una restricción "default": alter table empleados add constraint DF_empleados_año default 1990 for añoingreso; No lo permite porque el tipo de dato del campo ya tiene un valor predeterminado asociado. 21- Quite la asociación del valor predeterminado al tipo de dato: exec sp_unbindefault 'tipo_año'; 22- Agregue a la tabla "empleados" una restricción "default": alter table empleados add constraint DF_empleados_año default 1990 for añoingreso; 23- Asocie el valor predeterminado "VP_añoactual" al tipo de dato "tipo_año": exec sp_bindefault VP_añoactual, 'tipo_año'; 24- Verifique que el tipo de dato tiene asociado el valor predeterminado: exec sp_help tipo_año; 25- Verifique que la tabla "clientes" tiene asociado el valor predeterminado: exec sp_helpconstraint clientes; 26- Verifique que la tabla "empleados" no tiene asociado el valor predeterminado "VP_añoactual" asociado al tipo de dato y tiene la restricción "default": exec p_helpconstraint empleados;Ver solución
if object_id ('empleados') is not null drop table empleados; if object_id ('clientes') is not null drop table clientes; if exists (select *from systypes where name = 'tipo_año') exec sp_droptype tipo_año; exec sp_addtype tipo_año, 'int','null'; exec sp_help tipo_año; create table empleados( documento char(8), nombre varchar(30), añoingreso tipo_año ); if object_id ('VP_añoactual') is not null drop default VP_añoactual; create default VP_añoactual as datepart(year,getdate()); exec sp_bindefault VP_añoactual, 'tipo_año', 'futureonly'; exec sp_helpconstraint empleados; create table clientes( documento char(8), nombre varchar(30), añoingreso tipo_año ); exec sp_helpconstraint clientes; insert into empleados default values; select * from empleados; insert into clientes default values; select * from clientes; if object_id ('VP_año2000') is not null drop default Vp_año2000; create default VP_año2000 as 2000; exec sp_bindefault VP_año2000, 'tipo_año'; exec sp_helpconstraint empleados; exec sp_helpconstraint clientes; insert into empleados default values; select * from empleados; insert into clientes default values; select * from clientes; exec sp_help tipo_año; alter table empleados add constraint DF_empleados_año default 1990 for añoingreso; exec sp_unbindefault 'tipo_año'; alter table empleados add constraint DF_empleados_año default 1990 for añoingreso; exec sp_bindefault VP_añoactual, 'tipo_año'; exec sp_help tipo_año; exec sp_helpconstraint clientes; exec sp_helpconstraint empleados;