55 - Eliminar y dasasociar reglas (sp_unbindrule - drop rule) |
Una playa de estacionamiento almacena cada día los datos de los vehículos que ingresan en la tabla llamada "vehiculos". 1- Elimine la tabla, si existe: if object_id('vehiculos') is not null drop table vehiculos; 2- Elimine las siguientes reglas, si existen: if object_id ('RG_patente_patron') is not null drop rule RG_patente_patron; if object_id ('RG_vehiculos_tipo') is not null drop rule RG_vehiculos_tipo; if object_id ('RG_vehiculos_tipo2') is not null drop rule RG_vehiculos_tipo2; 3- Cree la tabla: create table vehiculos( patente char(6) not null, tipo char(1),--'a'=auto, 'm'=moto horallegada datetime not null, horasalida datetime ); 4- Cree una regla para restringir los valores que se pueden ingresar en un campo "patente" (3 letras seguidas de 3 dígitos): create rule RG_patente_patron as @patente like '[A-Z][A-Z][A-Z][0-9][0-9][0-9]'; 5-Asocie la regla al campo "patente": sp_bindrule RG_patente_patron,'vehiculos.patente'; 6- Intente ingresar un registro con valor para el campo "patente" que no cumpla con la regla: insert into vehiculos values ('FGHIJK','a','1990-02-01 18:00',null); aparece un mensaje de error indicando que hay conflicto con la regla y la inserción no se realiza. 7- Cree otra regla que controle los valores para el campo "tipo" para que solamente puedan ingresarse los caracteres "a" y "m": create rule RG_vehiculos_tipo as @tipo in ('a','m') 8- Asocie la regla al campo "tipo": sp_bindrule RG_vehiculos_tipo, 'vehiculos.tipo'; 9- Intente ingresar un registro con el valor 'c' para "tipo": insert into vehiculos values('AAA111','c','2001-10-10 10:10',NULL); No lo permite. 10- Cree otra regla llamada "RG_vehiculos_tipo2" que controle los valores para el campo "tipo" para que solamente puedan ingresarse los caracteres "a", "c" y "m": create rule RG_vehiculos_tipo2 as @tipo in ('a','c','m'); 11- Si la asociamos a un campo que ya tiene asociada otra regla, la nueva regla reeemplaza la asociación anterior. Asocie la regla creada en el punto anterior al campo "tipo". 12- Ingrese el registro que no pudo ingresar en el punto 9. 13- Intente eliminar la regla "RG_vehiculos_tipo2". No es posible porque está asociada a un campo de "vehiculos". 14- Elimine la regla "RG_vehiculos_tipo". Es posible porque no está asociada a ningún campo. 15- Intente eliminar la regla "RG_patente_patron". No es posible porque está asociada. 16- Quite la asociación de la regla con el campo "patente" de "vehiculos". 17- Vea si la regla "RG_patente_patron" está asociada a algún campo de "vehiculos". No lo está. 18- Verifique que la regla aún existe en la base de datos activa: sp_help; aparece la regla. 19- Elimine la regla que no pudo eliminar en el punto 15. 20- Verifique que la regla ya no existe en la base de datos activa. No aparece la regla "RG_patente_patron".Ver solución
if object_id('vehiculos') is not null drop table vehiculos; if object_id ('RG_patente_patron') is not null drop rule RG_patente_patron; if object_id ('RG_vehiculos_tipo') is not null drop rule RG_vehiculos_tipo; if object_id ('RG_vehiculos_tipo2') is not null drop rule RG_vehiculos_tipo2; create table vehiculos( patente char(6) not null, tipo char(1),--'a'=auto, 'm'=moto horallegada datetime not null, horasalida datetime ); create rule RG_patente_patron as @patente like '[A-Z][A-Z][A-Z][0-9][0-9][0-9]'; sp_bindrule RG_patente_patron,'vehiculos.patente'; insert into vehiculos values ('FGHIJK','a','1990-02-01 18:00',null); create rule RG_vehiculos_tipo as @tipo in ('a','m'); sp_bindrule RG_vehiculos_tipo, 'vehiculos.tipo'; insert into vehiculos values('AAA111','c','2001-10-10 10:10',NULL); create rule RG_vehiculos_tipo2 as @tipo in ('a','c','m'); sp_bindrule RG_vehiculos_tipo2, 'vehiculos.tipo'; insert into vehiculos values('AAA111','c','2001-10-10 10:10',NULL); drop rule RG_vehiculos_tipo2; drop rule RG_vehiculos_tipo; drop rule RG_patente_patron; exec sp_unbindrule 'vehiculos.patente'; sp_helpconstraint vehiculos; sp_help; drop rule RG_patente_patron; sp_help;