Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Crear y Asociar Reglas
Crear y Asociar Reglas
Vimos que SQL Server ofrece varias alternativas para asegurar la integridad
de datos, mediante el uso de:
2. REGLAS (rules) y
3. VALORES PREDETERMINADOS (defaults).
La variable puede tener cualquier nombre, pero debe estar precedido por el
signo arroba (@), dicha variable será reemplazada por el valor del campo
cuando se asocie.
Creamos una regla para restringir los valores que se pueden ingresar en un
campo "sueldo" de una tabla llamada "empleados", estableciendo un
intervalo de valores:
SQL Server NO controla los datos existentes para confirmar que cumplen
con la regla como lo hace al aplicar restricciones; si no los cumple, la regla
se asocia igualmente; pero al ejecutar una instrucción "insert" o "update"
muestra un mensaje de error, es decir, actúa en inserciones y
actualizaciones.
La regla debe ser compatible con el tipo de datos del campo al cual se
asocia; si esto no sucede, SQL Server no lo informa al crear la regla ni al
asociarla, pero al ejecutar una instrucción "insert" o "update" muestra un
mensaje de error.
No se puede crear una regla para campos de tipo text, image, o timestamp.
Si asocia una nueva regla a un campo que ya tiene asociada otra regla, la
nueva regla reeemplaza la asociación anterior; pero la primera regla no
desaparece, solamente se deshace la asociación.
- una restricción "check" puede incluir varios campos; una regla puede
asociarse a distintos campos (incluso de distintas tablas);
Con "sp_help" podemos ver todos los objetos de la base de datos activa,
incluyendo las reglas, en tal caso en la columna "Object_type" aparece
"rule".
go
go
go
go
go
go
go
go
-- Asociamos la regla anteriormente creada a los campos
"fechaingreso" y "fechanacimiento":
exec sp_bindrule RG_empleados_fechaingreso,
'empleados.fechaingreso';
exec sp_bindrule RG_empleados_fechaingreso,
'empleados.fechanacimiento';
go
go
go
go
go
go
exec sp_help;
Primer problema:
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
);
5- 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]'
6- Ejecute el procedimiento almacenado del sistema "sp_help" para ver
que la regla creada
anteriormente existe:
exec sp_help;
10- Cree otra regla que controle los valores para el campo "tipo" para
que solamente puedan
ingresarse los caracteres "a" y "m".
19- Intente establecer una restricción "check" que asegure que la fecha
y hora de llegada a la playa
no sea posterior a la fecha y hora de salida:
alter table vehiculos
add constraint CK_vehiculos_llegada_salida
check(horallegada<=horasalida);
No lo permite porque hay un registro que no cumple la restricción.
22- Cree una restricción "default" que almacene el valor "b" en el campo
"tipo:
alter table vehiculos
add constraint DF_vehiculos_tipo
default 'b'
for tipo;
Note que esta restricción va contra la regla asociada al campo "tipo" que
solamente permite los
valores "a", "c" y "m". SQL Server no informa el conflicto hasta que no
intenta ingresar el valor
por defecto.
23- Intente ingresar un registro con el valor por defecto para el campo
"tipo":
insert into vehiculos values ('STU456',default,'1990-02-01
10:10','1990-02-01 15:30');
No lo permite porque va contra la regla asociada al campo "tipo".