domingo, 31 de mayo de 2015

Vistas en SQL Server



Las vistas son consultas ya realizadas, pueden ser de una sola tabla o de varias. Muy útiles si por ejemplo queremos que un usuario solo tenga acceso a unas determinadas columnas de una tabla pero no a otras, para eso crearemos una vista con las columnas que puede ver. Las vistas tienen la propiedad que si cambiamos el nombre de las tablas o columnas a las que hace referencia, automáticamente se cambian en esta.
  • Create View
Crea una vista

Sintaxis:
CREATE VIEW NOMBREVISTA
AS
SENTENCIA SQL

Ejemplo:

Crea una vista llamada VistaEmpleados que contiene nº de empleado, apellido, fecha de alta, y nombre de departamento de las tablas Empleados y Departamento.

CREATE VIEW VISTAEMPLEADOS
AS
SELECT EMP_NO, APELLIDO, FECHA_ALT, DNOMBRE
FROM EMP
INNER JOIN DEPT
ON
EMP.DEPT_NO = DEPT.DEPT_NO



Vemos que la vista aparece en el nodo Vistas de la base de datos en el explorador de objetos del SQL Server Management Studio.

Mostramos los datos de la vista como si fuera una tabla.

SELECT * FROM VISTAEMPLEADOS



Si después de esto, modificamos los datos de las tablas aceptadas por la vista...

UPDATE DEPT SET DNOMBRE = 'CUENTAS'
WHERE DNOMBRE = 'CONTABILIDAD'

Volvemos a ver los datos de la vista y vemos que también han cambiado, ya que la Vista no es una copia de los datos si no una consulta realizada sobre los datos originales...



También se pueden realizar consultas usando campos de tablas mezclados con campos de vistas.

Ejemplo:

SELECT EMP_NO, APELLIDO, DNOMBRE
FROM VISTAEMPLEADOS
UNION
SELECT EMPLEADO_NO, APELLIDO, CAST(HOSPITAL_COD AS VARCHAR(6))
FROM PLANTILLA



También se puede realizar una vista con datos de una consulta de una tabla y una vista.

CREATE VIEW VISTAEMPUNIONHOSPITAL
AS
SELECT EMP_NO, APELLIDO, DNOMBRE
FROM VISTAEMPLEADOS
UNION
SELECT EMPLEADO_NO, APELLIDO, CAST(HOSPITAL_COD AS VARCHAR(6))
FROM PLANTILLA

Mostramos los datos de la vista

SELECT * FROM VISTAEMPUNIONHOSPITAL


  • SP_HelpText
Muestra la consulta que realiza la vista. 

Sintaxis:
SP_HelpText Vista

Ejemplo:

SP_HelpText VistaEmpleados


  • SP_Depends
Muestra las tablas, campos e incluso vistas de las que depende una vista. 

Sintaxis:
SP_Depends Vista

Ejemplo:

SP_Depends VistaEmpUnionHospital


  • Drop View
Borra una Vista. 

Sintaxis:
Drop View NombreVista

Ejemplo:

Drop View VistaEmpUnionHospital


  • Create View With Encryption
Crea una Vista encriptada, de forma que si hacemos una consulta con Sp_HelpText o SP_Depends solo nos devulve un mensaje indicando que la vista está encriptada.

Sintaxis:
Create View NombreVista
With Encryption
As
Sentencias Sql

Ejemplo:

CREATE VIEW APELLIDOS
WITH ENCRYPTION
AS
SELECT APELLIDO FROM EMP
UNION
SELECT APELLIDO FROM PLANTILLA
UNION
SELECT APELLIDO FROM DOCTOR

sp_helptext APELLIDOS



  • Create View with Check Option
Crea una vista cuyos datos a los que hace referencia, no se pueden modificar o borrar, para que los resultados de la vista no se vean afectados. Esto es muy práctico en caso de que por ejemplo hagamos una vista con una consulta que usa where.

Sintaxis:
CREATE VIEW NOMBREVISTA
AS
SENTENCIA SQL
WITH CHECK OPTION

Ejemplo:
CREATE VIEW VENDEDORES
AS
SELECT * FROM EMP WHERE OFICIO='VENDEDOR'
WITH CHECK OPTION

Con esta opción no podremos actualizar los campos que tenemos en el Where de la Vista, pero la tabla si que podemos modificarla, con lo cual ofrecemos permisos sobre la vista al usuario y no le damos permisos de ningún tipo sobre la tabla, que el usuario trabaje sobre las vistas.

Con la siguiente actualización no podría realizar modificaciones sobre la vista, porque le he puesto With Check Option. De esta forma le doy permisos sobre la vista, pero no sobre la tabla, y no podrá modificar un cambio en el campo que yo he puesto.

UPDATE VENDEDORES SET OFICIO = 'NINO' WHERE OFICIO = 'VENDEDOR'



Con la siguiente actualización si me permitiría realizar modificaciones aunque tuviese with Check Option en la vista, ya que estoy trabajando sobre la Tabla.

UPDATE EMP SET OFICIO = 'NINO' WHERE OFICIO = 'VENDEDOR'



Espero haber ayudado en algo. Hasta la próxima oportunidad!








2 comentarios:

  1. Gracias por la enseñanza, ha sido muy útil, muchos éxitos.

    ResponderEliminar
    Respuestas
    1. Hola Purringo, gracias por la visita y el aporte de tu comentario!
      Los mejores deseos! Hasta cualquier momento!

      Eliminar