Reordena vistas ordenadas en SQL Server

Hoy otro consejo (más bien un recurso) de SQL Server para vuestro día a día. Imaginad que tenéis una vista muy usada y que ya está creada con una ordenación por un determinado campo (por ejemplo devuelve un TOP n). Por ejemplo definimos esta Vista en la base de datos AdventureWorks:
CREATE VIEW miVista AS
SELECT TOP 10  e.employeeid,c.firstname,c.LastName,e.Gender,e.BirthDate
FROM [HumanResources].[Employee] e
INNER JOIN [Person].[Contact] c  ON c.[ContactID] = e.[ContactID]
ORDER BY e.employeeid
GO

¿Cómo obtendríais registros con esos mismos campos (u otros), pero ordenados por cualquier otro campo que el que se definió en la Vista? ¿Creáis otra vista para tal fin?. ¿O qué pasa si queréis recuperar algún campo más de esas tablas, que ahora no devuelve dicha Vista?. La respuesta puede pasar simplemente en reescribir dicha vista como un stored procedure, con los cambios dinámicos que necesitéis, ya que las Vistas por su propia definición son y deben ser estáticas. Por ejemplo así:

CREATE PROC dbo.miVistaProc AS
SELECT TOP 10 e.employeeid,c.firstname,c.LastName,e.Gender,e.BirthDate,e.LoginID,e.MaritalStatus
FROM [HumanResources].[Employee] eINNER JOIN [Person].[Contact] c ON c.[ContactID] = e.[ContactID
ORDER BY c.firstname,e.birthdate
GO


SELECT * FROM miVista




EXEC miVistaProc

Está claro que si la vista no estuviera ordenada por ningún campo podríamos incluso llamarla desde dentro del nuevo stored procedure ordenándola por un campo determinado según algún parametro del procedimiento, haciendo refactoring de código, a la vez que ganamos en dinamismo, funcionalidad, etc. Un stored procedure está para hacer muchas cosas, sí, pero también porqué no, para devolver un SELECT con las condiciones que necesitemos. ¿O no?. Nos vemos.

No hay comentarios :

Publicar un comentario

Buscar en el Blog: