Listado completo de tutoriales

109 - Vistas modificar (alter view)


Ver video

Para modificar una vista puede eliminarla y volver a crearla o emplear "alter view".

Con "alter view" se modifica la definición de una vista sin afectar los procedimientos almacenados y los permisos. Si elimina una vista y vuelve a crearla, debe reasignar los permisos asociados a ella.

Sintaxis básica para alterar una vista:

 alter view NOMBREVISTA
  with encryption--opcional
 as SELECT

En el ejemplo siguiente se altera vista_empleados para agregar el campo "domicilio":

 alter view vista_empleados
  with encryption
 as
  select (apellido+' '+e.nombre) as nombre,sexo,
   s.nombre as seccion, cantidadhijos,domicilio
   from empleados as e
   join secciones as s
   on codigo=seccion

Si creó la vista con "with encryption" y quiere modificarla manteniendo la encriptación, debe colocarla nuevamente, en caso de no hacerlo, desaparece.

Si crea una vista con "select *" y luego agrega campos a la estructura de las tablas involucradas, los nuevos campos no aparecerán en la vista; esto es porque los campos se seleccionan al ejecutar "create view"; debe alterar la vista.

Servidor de SQL Server instalado en forma local.

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('secciones') is not null
  drop table secciones;

create table secciones(
  codigo tinyint identity,
  nombre varchar(20),
  constraint PK_secciones primary key (codigo)
);

create table empleados(
  legajo int identity,
  documento char(8),
  nombre varchar(30),
  domicilio varchar(30),
  seccion tinyint not null,
  constraint FK_empleados_seccion
   foreign key (seccion)
   references secciones(codigo)
   on update cascade,
  constraint PK_empleados
   primary key (documento)
);

go

insert into secciones values('Administracion');
insert into secciones values('Contaduría');
insert into secciones values('Sistemas');

insert into empleados values('22222222','Lopez Ana','Colon 123',1);
insert into empleados values('23333333','Lopez Luis','Sucre 235',1);
insert into empleados values('24444444','Garcia Marcos','Sarmiento 1234',2);
insert into empleados values('25555555','Gomez Pablo','Bulnes 321',3);
insert into empleados values('26666666','Perez Laura','Peru 1254',3);

if object_id('vista_empleados') is not null
  drop view vista_empleados;

go
-- Creamos la vista "vista_empleados" encriptada que muestre algunos campos 
-- de los empleados de la sección 1 y colocamos "with check option":
create view vista_empleados
  with encryption
 as
  select documento,nombre,seccion
  from empleados
  where seccion=1
  with check option;

go

select * from vista_empleados;

-- Veamos el texto de la vista (No lo permite porque está encriptada):
exec sp_helptext vista_empleados;

go

-- Modificamos la vista para que muestre el domicilio y no colocamos
-- la opción de encriptación ni "with check option":
alter view vista_empleados
 as
  select documento,nombre,seccion, domicilio
  from empleados
  where seccion=1;

go

select * from vista_empleados;

-- Veamos el texto de la vista(Lo permite porque ya no está encriptada):
exec sp_helptext vista_empleados;

-- Actualizamos la sección de un empleado:
update vista_empleados set seccion=2 where documento='22222222';

select * from vista_empleados;

if object_id('vista_empleados2') is not null
  drop view vista_empleados2;

go

-- Creamos la vista "vista_empleados2" que muestre todos los campos
-- de la tabla "empleados":
create view vista_empleados2
 as
  select * from empleados;

go

select * from vista_empleados2;

-- Agregamos un campo a la tabla "empleados":
alter table empleados
 add sueldo decimal(6,2);

-- Consultamos la vista "vista_empleados2" (Note que el nuevo campo
-- agregado a "empleados" no aparece):
select * from vista_empleados2;

go

-- Alteramos la vista para que se muestre el campo sueldo:
alter view vista_empleados2
 as
  select * from empleados;

go

select * from vista_empleados2; 

Retornar