lunes, 8 de junio de 2015

Lunes 08/06/2015 (Filtros Manejo de nulos)

Tiempo invertido: 4 horas y 30 minutos, aproximadamente.

16:00-20:30

En este proyecto de programacion, como en cualquier otro proyecto se debe realizar se debe tener en cuenta el manejo de nulos, ya que si no se tomo en cuenta el manejo de nulos en un proyecto puede que surgan muchos problemas o conflictos en la programacion a causa de nulos.
Para no contar con problemas por no administrar bien los nulos, se decidio utilizar la funcion de SQL llamada ISNULL, la cual compara si un atributo es o no nulo.

Esta funcion de SQL la utilizamos en el Store Procedure por medio del cual realizamos para obtener el historial para una finca. Acontinuacion explicaremos un poco mas este SP.

Lo primero que se debe hacer es declarar una variable tabla en la cual se almacenara todos los datos requeridos para hacer el historial de una finca, y se declara una costoParcial tipo FLOAT.

        DECLARE @QueryResult TABLE(ID INT, ActivityDate VARCHAR(10), ActivityName VARCHAR(50), Attendant VARCHAR(50), RequestType VARCHAR(50), RequestDescription VARCHAR(150), RequestState VARCHAR(50))
        DECLARE @PartialCost FLOAT

Luego de declarar la variable tabla se debe realizar un filtro para poder obtener los datos que se necesitan en el cual de hacen varios inner join para obtener el FK_LotXCycle.

        SELECT R.ID, CONVERT(VARCHAR(10), H.ActivityDate, 103) AS ActivityDate, AT.Name AS ActivityName, A.Name AS Attendant, RT.Name AS RequestType, SUBSTRING(R.RequestDescription, CHARINDEX(' ', R.RequestDescription) + 1, LEN(R.RequestDescription)) AS RequestDescription, R.RequestState FROM dbo.AP_Historical H
            inner join dbo.AP_Request R ON R.ID = H.FK_Request
            inner join dbo.AP_Attendant A ON A.ID = R.FK_Attendant
            inner join dbo.AP_ActivityType AT ON AT.ID = R.FK_ActivityType
            inner join dbo.AP_RequestType RT ON RT.ID = R.FK_RequestType
            WHERE R.FK_LotXCycle = @FK_LotXCycle

Luego de ralizar esto es donde entra en uso la funcion ISNULL la cual nos ayuda a comparar varios valores que debemos filtar para que no se den conflictos con nulos.
En este caso lo que realizamos en la comparacion es:

AT.Name = ISNULL(@ActivityType, AT.Name)
                and A.Name = ISNULL(@Attendant, A.Name)

Estos son dos ejemplos para tener una idea mas clara de como trabaja esta Funcion, la primera es para obtener el nombre del tipo de actividad que se realio, si esta actividad es igual a nulo se compara con ella misma para que de esta forma la funcion nos de como resultado TRUE y no haya ningun inconveniente, si este no es nulo se compara con el nombre que fue dado como parametro en el Store Procedure.
De esta forma es que se da la utilizacion de la funcion ISNULL para poder asi de una mejor forma resolver el manejo de nulos en este proyecto.

No hay comentarios:

Publicar un comentario