Voy a poner como ejemplo una tabla Usuario con los siguientes campos.
Id | Nombre | Apellido
1 Juan Romero
2 Pedro Gutierrez
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.
- Asignar el resultado a la variable directamente dentro de la consulta.
declare @var intset @var = 0select 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 intset @var = 0set @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 intset @var = 0select 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:
El resultado es:declare @var intset @var = 0set @var = (select top 1 Id from Usuario where Nombre = ' Maria')select @var as 'Id'
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 intset @var = 0set @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