Tengo una pregunta básica de SQL

¿Qué significa IsNull () = 0 en este código? Hasta donde yo sé, = asigna un valor, pero en este caso se usa dentro de una instrucción Where. Espero que alguien me lo explique :)

    Where       vol.espe_codigo =   matriz.espe_codigo
    And         IsNull(costo_gerencias.plde_codigo,0)   =   0
-4
CuchoAv 27 dic. 2016 a las 19:01

3 respuestas

La mejor respuesta

Significa que si costo_gerencias.plde_codigo es nulo, devolverá 0 o lo que sea el segundo argumento a la función ISNULL. En este caso, la cláusula WHERE básicamente dice "donde vol.espe_codigo es igual a matriz.espe_codigo y costo_gerencias.plde_codigo es nulo o igual a cero".

2
rory.ap 27 dic. 2016 a las 16:12

Isnull (firstvalue, secondvalue) prueba si el valor de firstvalue es NULL o no. Cuando el valor no es nulo, se devuelve este valor, pero cuando el valor es nulo, se devuelve el valor de secondvalue.

Ejemplos:

declare @test varchar(100) = 'abc'
declare @test2 varchar(100) = '123'

isnull(@test, @test2) will return 'abc'

Segundo ejemplo:

declare @test varchar(100) = null
declare @test2 varchar(100) = '123'

isnull(@test, @test2) will return '123'

Tercer ejemplo:

declare @test varchar(100) = ''
declare @test2 varchar(100) = '123'

isnull(@test, @test2) will return ''

Lo uso más para verificar las columnas varchar, ya que pueden contener una cadena vacía que no es lo mismo que NULL, pero en un DataGridView o TextBox no puede ver la diferencia.

2
GuidoG 27 dic. 2016 a las 16:18

IsNull() es una función que toma dos valores de entrada de cualquier tipo; sin embargo, el segundo debe ser implícitamente convertible al tipo en el primer parámetro. (Ver enlace)

El motor de base de datos evalúa el primer parámetro y, si es nulo, el sistema devuelve el segundo parámetro. Si el primer parámetro no es nulo, devuelve el valor del primer parámetro.

Entonces, en su caso, el motor devolverá el valor 0 si plde_codigo es nulo. Si no es nulo, devuelve el valor de plde_codigo pasado.

Esto a su vez significa que su conjunto de resultados solo contendrá registros que tengan un valor NULL o 0 en plde_Codigo; Además de otros criterios limitantes.

También podría escribirse como:

(costo_gerencias.plde_codigo is NULL OR costo_gerencias.plde_codigo = 0)

O para ser más agnóstica en la base de datos:

coalesce(costo_gerencias.plde_codigo,0)=0

Pero en este caso plde_codigo debe ser numérico; mientras que podría ser texto al usar isNull()

2
xQbert 27 dic. 2016 a las 16:24