martes, 10 de enero de 2017

Reglas en SQL SERVER

Para crear una regla en SQL Server utilizaremos el comando CREATE RULE.

Buenos días queridos lectores el día de hoy les hablare sobre la reglas en SQL SERVER, vamos a ver un poco de teoría y luego pasaremos a lo que nos gusta que es hacerlo

Una regla es similar a la restricción CHECK con la distinción que la la restricción CHECK es parte de la tabla y la RULE es independiente a la tabla, se le tendría que asignar una regla a la tabla, de esta manera podremos tener varias veces la misma regla asociada a varias tablas, las reglas son mas prácticas que el CHECK y se recomienda su uso, pero veamos un ejemplo de como se utilizan las reglas en SQL SERVER.



--Crear regla
create rule edad
as
@edad>18
GO

Como ven con el comando CREATE RULE estamos creando la regla, donde la variable edad sea mayor a 18 años, ya tenemos la regla creada, ahora vamos a crear la tabla donde tendrá efecto la regla:


create table usuarios(
iniciales char(4),
nombre text,
edad int)

Una vez creada la tabla lo que tenemos que hacer el asignar la regla a esa tabla, vamos a insertar un registro, para comprobar que la regla, aun creada, aun no tiene funcionalidad alguna.


insert into usuarios values ('PV','Paula Valtierra', 17)

Como ven, al ingresar ese registro se ingresa sin nunguna restricción, ya que la regla, como les comenté está creada pero no esta asignada a ninguna tabla, vamos a asignar la regla a la tabla:


--Asignar regla edad a la tabla usuarios, campos edad
EXEC sp_bindrule          
 'edad',
 'usuarios.edad'
GO

Como ven, con el procedimiento almacenado sp_bindrule, vamos a asignar la regla llamada edad, se lo asignaremos a la tabla usuarios en su campo edad. Una vez asignada la regla, procederemos a hacer la prueba.

insert into usuarios values ('LEUR','Luis Emmanuel Urias', 17)

Al tratar de ejecutar esta instrucción nos marcará un error debido a que no se cumple la regla, la cual es que la edad deberá ser mayor a 18 y no sarrojará el siguiente error:

Mens. 513, Nivel 16, Estado 0, Línea 1

Una inserción o actualización de columna está en conflicto con una regla impuesta por una instrucción CREATE RULE anterior. La instrucción se anuló. El conflicto apareció en la base de datos 'Prueba1', tabla 'dbo.usuarios', columna 'edad'.
Se terminó la instrucción.
 

Como ven, aquí la regla se cumple y no nos permite ingresar el registro, lo cual es correcto, para borrar una regla, se utiliza el comando DROP RULE

DROP RULE edad

Si intentamos borrar esta regla, nos mostrará un mensaje de error debido a que esta regla está asociada a una tabla, así que mostrará este error:

Mens. 3716, Nivel 16, Estado 1, Línea 1
No se puede quitar el regla 'edad'. Está enlazado con uno o varios columna.

Como ven, no nos dejará borrar hasta desasociar y para eso ejecutaremos el procedimiento almcenado del sistema llamado sp_unbindrule


EXEC sp_unbindrule
'usuarios.edad'

Una vez con la regla desvinculada, ahora si podemos borrarla, mediante el comando DROP.

Graficamente las reglas que tenemos creadas aparecen en el Managment Studio, como en la siguiente imagen:



Hasta aquí el post, espero que haya sido de su agrado, pero sobre todo de su utilidad, les invito a comentar, a compartir, dar +1 o dar clic en algún anuncio, cualquier duda estoy a sus ordenes.

Saludos



Banderas de Visitantes

Flag Counter