19 enero 2013

Asignar el valor de una variable desde una consulta

Una operación normal dentro de funciones y procedimientos en SQL Server es asignarle a una variable el resultado de una consulta, existen dos métodos, uno es asignar el valor a la variable directamente dentro de la consulta:


SELECT TOP@var1 = EmployeeID FROM dbo.Employees WHERE LastName = ''


El otro método es usando la instrucción SET


SET @var1 =  (SELECT TOP 1 EmployeeID FROM dbo.Employees WHERE LastName = '')


El problema que suele presentarse es que los dos métodos tienen diferente manera de comportarse en lo que se refiere al valor de la variable si la consulta no retorna ningún resultado, si revisamos el primer caso y partiendo de que la consulta no retorna ningún valor (base de datos Northwind)


DECLARE @var1 INT

SET @var1 = 0

SELECT TOP 1 @var1 = EmployeeID FROM dbo.Employees WHERE LastName = ''

SELECT @var1


El resultado es:



-----------
0

(1 row(s) affected)


Esto quiere decir que conserva el valor que se le asigno a la variable antes de usarla en la consulta, si revisamos el otro método:


SET @var1 = 0

SET @var1 =  (SELECT TOP 1 EmployeeID FROM dbo.Employees WHERE LastName = '')

SELECT @var1


el resultado es:



-----------
NULL

(1 row(s) affected)


Esto es, aun cuando a la variable se le asigno el valor 0 al inicio, al momento de la segunda asignación y ya que esta consulta no retorna ningún valor, SQL Server la cambia a NULL


Conocer esto y tenerlo en cuenta nos ayudara a impedir posibles errores, una forma es nunca dejar de usar el ISNULL en el manejo de nuestras variables asignando valores default cuando sea posible.

Espero que sea de tu interés o que te haya ayudado a solucionar algun problema que se te este presentando