lunes, 13 de junio de 2016

Asignar el resultado de una consulta a una variable

Voy a poner como ejemplo una tabla Usuario con los siguientes campos.
       Id   Nombre   Apellido
       1       Juan           Romero
       2       Pedro         Gutierrez 

Dentro de un procedimiento o función a veces necesitamos almacenar el resultado de una consulta, existen dos formas de hacerlo.

  1. Asignar el resultado a la variable directamente dentro de la consulta.
        
          declare @var int
          set @var = 0
          select top 1 @var = Id from Usuario where Nombre = 'Juan'
          select  @var as 'Id'

         El resultado es:
              Id
              1

     2. Utilizar la instrucción SET 
        
         
         declare @var int
         set @var = 0
         set @var = (select top 1 Id from Usuario where Nombre = ' Pedro ')
         select  @var as 'Id'

         El resultado es:
              Id
              2

Hasta aquí todo bien, pero el set y select tienen diferentes formas de comportamiento en lo que se refiere al valor de la variable si la consulta no devuelve ningún resultado.
Utilicemos el mismo ejemplo.

          
         declare @var int
          set @var = 0
          select top 1 @var = Id from Usuario where Nombre = 'Maria'
          select  @var as 'Id'

          El resultado es:
              Id
              0
       
Esto significa que la variable conserva el valor que se le asignó antes de usarla, ahora veamos el otro ejemplo:
         

         declare @var int
         set @var = 0
         set @var = (select top 1 Id from Usuario where Nombre = ' Maria')
         select  @var as 'Id'
         El resultado es:
              Id
              NULL

Como la consulta no devuelve ningún valor, SQL le cambia el valor de la variable a NULL.
     
Es importante conocer esto, ya que nos ayudará a impedir posibles errores. Pero como evitamos el NULL cada vez que nuestra consulta no devuelva ningún valor.? para esto vamos a utilizar la instrucción ISNULL
      

        declare @var int
         set @var = 0
         set @var = (select top 1 Id from Usuario where Nombre = ' Maria')
         select  ISNULL(@var, 0) as 'Id'

         El resultado es:
              Id
              0

No hay comentarios:

Publicar un comentario