Listado completo de tutoriales
55 - Eliminar y dasasociar reglas (sp_unbindrule - drop rule) |
Para eliminar una regla, primero se debe deshacer la asociación, ejecutando el procedimiento almacenado del sistema "sp_unbindrule":
exec sp_unbindrule 'TABLA.CAMPO';
No es posible eliminar una regla si está asociada a un campo. Si intentamos hacerlo, aparece un mensaje de error y la eliminación no se realiza.
Con la instrucción "drop rule" eliminamos la regla:
drop rule NOMBREREGLA;
Quitamos la asociación de la regla "RG_sueldo_intervalo" con el campo "sueldo" de la tabla "empleados" tipeando:
exec sp_unbindrule 'empleados.sueldo';
Luego de quitar la asociación la eliminamos:
drop rule RG_sueldo_100a1000;
Si eliminamos una tabla, las asociaciones de reglas de sus campos desaparecen, pero las reglas siguen existiendo.
Ingresemos el siguiente lote de comandos en el SQL Server Management Studio:
if object_id ('empleados') is not null
drop table empleados;
if object_id ('RG_sueldo_100a1000') is not null
drop rule RG_sueldo_100a1000;
create table empleados(
documento char(8),
nombre varchar(30) not null,
seccion varchar(20),
sueldo decimal(6,2),
primary key(documento)
);
go
-- Creamos una regla para restringir los valores que se pueden ingresar
-- en un campo "sueldo":
create rule RG_sueldo_100a1000
as @sueldo between 100 and 1000;
go
-- Asociamos la regla creada anteriormente al campo "sueldo":
exec sp_bindrule RG_sueldo_100a1000, 'empleados.sueldo';
-- Vemos si la regla está asociada a algún campo de "empleados":
exec sp_helpconstraint empleados;
-- Quitamos la asociación:
exec sp_unbindrule 'empleados.sueldo';
-- Ahora que hemos quitado la asociación, podemos ingresar el valor
-- "1200" en el campo "sueldo":
insert into empleados values ('30111222','Pedro Torres','Contaduria',1200);
-- Vemos si la regla está asociada a algún campo de "empleados":
exec sp_helpconstraint empleados;
-- Ejecutamos el procedimiento "sp_help" para verificar que la regla aún existe:
exec sp_help;
-- Ahora si podemos borrar la regla:
drop rule RG_sueldo_100a1000;