Tablas – ejercicio modificar – agregar Check

Modificación de Tablas

Las tablas permanentemente se tienen que modificar si es que se incluyen en los sistemas nuevas funcionalidades, es posible que se agreguen tablas nuevas y algunas se tengan que modificar. Las reglas de negocio para las tablas existentes pueden cambiar, lo  que hace en ocasiones necesario de agregar restricciones a las tablas. En este ejercicio se muestra como agregar campos, restricciones y analizar los registros que no cumplan con una restricción de tipo Check.

 

Creación y modificación de tablas.

1. Primero crear una base de datos, si no tienen las unidades C:, D: y E: pueden cambiar por solamente C:

xp_create_subdir ‘C:\BD’
go
xp_create_subdir ‘D:\BD’
go
xp_create_subdir ‘E:\BD’
go
Create database SistemasG1
on Primary
(Name=’S1′,Filename=’C:\BD\S1.mdf’), (Name=’S2′,Filename=’E:\BD\S2.ndf’),
filegroup Contable
(Name=’S3′,Filename=’D:\BD\S3.ndf’)
log on
(Name=’Log1′,Filename=’C:\BD\Log1.ldf’)
go
use SistemasG1
go

2. Ejemplo para el módulo de Ventas. Tabla Categorias: Esquema: dbo, Grupo: Primary

Create table Categorias
(
CategoriasCodigo nchar(4), CategoriasDescripcion nvarchar(100),
CategoriasEstado nchar(1), CategoriasFechaCreacion Date,
constraint CategoriasPK Primary key (CategoriasCodigo)
)
go

3. La tabla Clientes se creará en el esquema Ventas, grupo Contable

Create schema Ventas
go
Create table Ventas.Clientes
(
ClientesCodigo nchar(8), ClientesNombre nvarchar(200),
ClientesDireccion nvarchar(300), ClientesFechaRegistro Date,
constraint ClientesPK Primary key (ClientesCodigo)
) on Contable
go

4. Productos en el esquema Comercial: código, descripción, precio, Stock, estado, la categoria a la que pertenece (FK)

Create schema Comercial
go
create table Comercial.Productos
( ProductosCodigo nchar(4), ProductosDescripcion nvarchar(100),
ProductosPrecio Numeric(9,2),ProductosStock Numeric(9,2),
ProductosEstado nchar(1), CategoriasCodigo nchar(4),
constraint ProductosPK primary key (ProductosCodigo),
constraint ProductosCategoriasFK Foreign key (CategoriasCodigo)
references dbo.Categorias (CategoriasCodigo)
) on [Primary]
go

Modificación de tablas: (Ver Modificación de tablas)

Alter table Esquema.NombreTabla…

Campos Agregar: add columna
Modificar: Alter column Columna
Eliminar: Drop Column NombreColumna
Restricciones:
Agregar: Add constraint ….
Eliminar: Drop contraint ….

Información detallada en el post de modificación de tablas, cuyo link se encuentra líneas arriba.

5. Agregar en la tabla Clientes los campos Correo y Telefono

Alter table Ventas.Clientes
add ClientesCorreo nvarchar(100), ClientesTelefono nvarchar(50)
go




6. Ver la estructura de la tabla

sp_help ‘Ventas.clientes’
go

6. Agregar restricción para el campo Precio en la tabla productos condición Precio >= 0

Alter table Comercial.Productos add constraint ProductosPrecioCK
Check (ProductosPrecio >= 0)
go

7. Crear la tabla Empleados

Create table Empleados
(Codigo nchar(3), nombre nvarchar(100), Sueldo Numeric(9,2),
constraint CodigoPK Primary key (Codigo)
)
go

8. Insertar registros

insert into Empleados values (‘520′,’Carlos’,1850),
(‘089′,’Juan’,850),(‘395′,’Guillermo’,1250)
go

9. Ver los registros

select * from Empleados
go

9. Agregar restricción para el sueldo >= 1000, note que uno no cumple.

Alter table Empleados
add constraint EmpleadosSueldoCK check (sueldo>=1000)
go
Mens. 547, Nivel 16, Estado 0, Línea 1
Instrucción ALTER TABLE en conflicto con la restricción CHECK “EmpleadosSueldoCK”. El conflicto ha aparecido en la base de datos “SistemasG1”, tabla “dbo.Empleados”, column ‘Sueldo’.

10. Debe agregarse a la instrucción la cláusula With Nocheck

Alter table Empleados with nocheck
add constraint EmpleadosSueldoCK check (sueldo>=1000)
go

11. Prueba de la restricción

insert into Empleados values (‘814′,’Aldo’,950)
go

El registro no se agrega porque el sueldo es 950.

12. Se puede usar DBCC CheckConstraints para ver los sueldos no cumplen

dbcc checkconstraints (EmpleadosSueldoCK)
go

13. Para saber quien es el empleado.

select * from Empleados where Sueldo = 850
go

14. Para listar los constraints tipo Check

select * from sys.check_constraints
go