Problemas con valor NULL

10/06/2006 - 18:08 por Eliana Londoño | Informe spam
Buenos dias, tengo el siguiente procesimiento almacenado
*****************
CREATE procedure A_prueba
@Placa_Vehiculo char(10),
@Identificacion_Propietario_Por_Matricula2 char(15)
AS
DECLARE @Identificacion_Propietario_Por_Matricula2_Actual char(15)
SELECT @Identificacion_Propietario_Por_Matricula2_Actual =
Identificacion_Propietario_Por_Matricula2
FROM Vehiculos Where Placa_Vehiculo = @Placa_Vehiculo
/*-- Si la Id del propietario actual es diferente a la que se envia como
parametro agregamos un registro en la tabla de Historicos --*/
SET ANSI_NULLS OFF
IF (@Identificacion_Propietario_Por_Matricula2_Actual <>
@Identificacion_Propietario_Por_Matricula2)
INSERT INTO Vehiculos_Historico (Placa_Vehiculo,
Identificacion_Propietario_Por_Matricula2)
VALUES (@Placa_Vehiculo, @Identificacion_Propietario_Por_Matricula2)
SET ANSI_NULLS ON
RETURN
GO
*****************
El problema es que cuando uno de los valores viene Nulo, ya sea el que
recupero de la tabla original o el que se envia como parametro, la condicion
no se cumple

Estuve leyendo y vi que era por lo del SET ANSI_NULLS (primero no lo tenia),
pero lo coloque y nada...
Tambien evalue el valor de las dos vbles y efectivamente una viene como NULL
y la otra con un valor valido...

Que se les ocurre que pueda estar haciendo de manera equivocada?.. o como
pueden colaborarme con el problema...

Muchas gracias por sus comentarios...

Eliana Londoño
Medellin-Colombia

Preguntas similare

Leer las respuestas

#1 Carlos
11/06/2006 - 13:30 | Informe spam
No entiendo bien, quieres que la condicion se cumpla aunque el campo o la
variable vengan con un valor NULL ??? algo como un LEFT JOIN ???

Por si acaso checate la funcion ISNULL().


"Eliana Londoño" escribió en el mensaje
news:
Buenos dias, tengo el siguiente procesimiento almacenado
*****************
CREATE procedure A_prueba
@Placa_Vehiculo char(10),
@Identificacion_Propietario_Por_Matricula2 char(15)
AS
DECLARE @Identificacion_Propietario_Por_Matricula2_Actual char(15)
SELECT @Identificacion_Propietario_Por_Matricula2_Actual =
Identificacion_Propietario_Por_Matricula2
FROM Vehiculos Where Placa_Vehiculo = @Placa_Vehiculo
/*-- Si la Id del propietario actual es diferente a la que se envia como
parametro agregamos un registro en la tabla de Historicos --*/
SET ANSI_NULLS OFF
IF (@Identificacion_Propietario_Por_Matricula2_Actual <>
@Identificacion_Propietario_Por_Matricula2)
INSERT INTO Vehiculos_Historico (Placa_Vehiculo,
Identificacion_Propietario_Por_Matricula2)
VALUES (@Placa_Vehiculo, @Identificacion_Propietario_Por_Matricula2)
SET ANSI_NULLS ON
RETURN
GO
*****************
El problema es que cuando uno de los valores viene Nulo, ya sea el que
recupero de la tabla original o el que se envia como parametro, la
condicion no se cumple

Estuve leyendo y vi que era por lo del SET ANSI_NULLS (primero no lo
tenia), pero lo coloque y nada...
Tambien evalue el valor de las dos vbles y efectivamente una viene como
NULL y la otra con un valor valido...

Que se les ocurre que pueda estar haciendo de manera equivocada?.. o como
pueden colaborarme con el problema...

Muchas gracias por sus comentarios...

Eliana Londoño
Medellin-Colombia


Respuesta Responder a este mensaje
#2 Alejandro Mesa
12/06/2006 - 14:50 | Informe spam
Eliana,

Existen varias formas de resolver este problema. Para que la solucion sea
optima, requerimos saber un poco mas sobre el esquema de la tabla en question.

- La columna [Placa_Vehiculo] acepta valor NULL?
- Tiene esa tabla algun indice por la columna [Placa_Vehiculo]?
- Cual es resultado esperado de ese procedimiento?

Una solucion comun es:

Where
(Placa_Vehiculo = @Placa_Vehiculo)
or
(@Placa_Vehiculo is null)

Si deseas la filas cuyo valor en la columna [Placa_Vehiculo] es igual al
valor del parametro y ademas si es NULL:

Where
(Placa_Vehiculo = @Placa_Vehiculo or Placa_Vehiculo is null)
or
(@Placa_Vehiculo is null)


Dynamic Search Conditions in T-SQL
http://www.sommarskog.se/dyn-search.html

Te aconsejo que no uses el setting "SET ANSI_NULLS OFF", pues los resultados
pueden ser impredecibles.

A NULL Puzzl
http://groups.google.com/group/micr...2MSFTNGP12


AMB

"Eliana Londoño" wrote:

Buenos dias, tengo el siguiente procesimiento almacenado
*****************
CREATE procedure A_prueba
@Placa_Vehiculo char(10),
@Identificacion_Propietario_Por_Matricula2 char(15)
AS
DECLARE @Identificacion_Propietario_Por_Matricula2_Actual char(15)
SELECT @Identificacion_Propietario_Por_Matricula2_Actual =
Identificacion_Propietario_Por_Matricula2
FROM Vehiculos Where Placa_Vehiculo = @Placa_Vehiculo
/*-- Si la Id del propietario actual es diferente a la que se envia como
parametro agregamos un registro en la tabla de Historicos --*/
SET ANSI_NULLS OFF
IF (@Identificacion_Propietario_Por_Matricula2_Actual <>
@Identificacion_Propietario_Por_Matricula2)
INSERT INTO Vehiculos_Historico (Placa_Vehiculo,
Identificacion_Propietario_Por_Matricula2)
VALUES (@Placa_Vehiculo, @Identificacion_Propietario_Por_Matricula2)
SET ANSI_NULLS ON
RETURN
GO
*****************
El problema es que cuando uno de los valores viene Nulo, ya sea el que
recupero de la tabla original o el que se envia como parametro, la condicion
no se cumple

Estuve leyendo y vi que era por lo del SET ANSI_NULLS (primero no lo tenia),
pero lo coloque y nada...
Tambien evalue el valor de las dos vbles y efectivamente una viene como NULL
y la otra con un valor valido...

Que se les ocurre que pueda estar haciendo de manera equivocada?.. o como
pueden colaborarme con el problema...

Muchas gracias por sus comentarios...

Eliana Londoño
Medellin-Colombia



Respuesta Responder a este mensaje
#3 Eliana Londoño
12/06/2006 - 17:36 | Informe spam
Gracias por contestar...

La condicion con la que tengo el problema es

IF (@Identificacion_Propietario_Por_Matricula2_Actual <>
@Identificacion_Propietario_Por_Matricula2)

Esto NO esta dentro de un SQL, es una condicion para que se haga un insert
en otra tabla. O sea es la comparacion de dos vbles, cuando una de ellas
tiene como valor NULL

Espero que sea mas clara la pregunta...

Otra vez, gracias y espero mas comentarios...

Eliana Londoño
Medellin-Colombia




"Eliana Londoño" escribió en el mensaje
news:
Buenos dias, tengo el siguiente procesimiento almacenado
*****************
CREATE procedure A_prueba
@Placa_Vehiculo char(10),
@Identificacion_Propietario_Por_Matricula2 char(15)
AS
DECLARE @Identificacion_Propietario_Por_Matricula2_Actual char(15)
SELECT @Identificacion_Propietario_Por_Matricula2_Actual =
Identificacion_Propietario_Por_Matricula2
FROM Vehiculos Where Placa_Vehiculo = @Placa_Vehiculo
/*-- Si la Id del propietario actual es diferente a la que se envia como
parametro agregamos un registro en la tabla de Historicos --*/
SET ANSI_NULLS OFF
IF (@Identificacion_Propietario_Por_Matricula2_Actual <>
@Identificacion_Propietario_Por_Matricula2)
INSERT INTO Vehiculos_Historico (Placa_Vehiculo,
Identificacion_Propietario_Por_Matricula2)
VALUES (@Placa_Vehiculo, @Identificacion_Propietario_Por_Matricula2)
SET ANSI_NULLS ON
RETURN
GO
*****************
El problema es que cuando uno de los valores viene Nulo, ya sea el que
recupero de la tabla original o el que se envia como parametro, la
condicion no se cumple

Estuve leyendo y vi que era por lo del SET ANSI_NULLS (primero no lo
tenia), pero lo coloque y nada...
Tambien evalue el valor de las dos vbles y efectivamente una viene como
NULL y la otra con un valor valido...

Que se les ocurre que pueda estar haciendo de manera equivocada?.. o como
pueden colaborarme con el problema...

Muchas gracias por sus comentarios...

Eliana Londoño
Medellin-Colombia


Respuesta Responder a este mensaje
#4 Alfredo Novoa
12/06/2006 - 17:50 | Informe spam
Hola Eliana,

On Mon, 12 Jun 2006 10:36:44 -0500, in microsoft.public.es.sqlserver
you wrote:

IF (@Identificacion_Propietario_Por_Matricula2_Actual <>
@Identificacion_Propietario_Por_Matricula2)

Esto NO esta dentro de un SQL, es una condicion para que se haga un insert
en otra tabla. O sea es la comparacion de dos vbles, cuando una de ellas
tiene como valor NULL



El problema es que NULL no es un valor sino que es una marca que
indica que no hay ningún valor en la variable.

Lo único que puedes hacer es comprobar si una variable está sin valor
usando IS NULL.


Saludos
Alfredo
Respuesta Responder a este mensaje
#5 Alejandro Mesa
12/06/2006 - 19:35 | Informe spam
Entonces trata:

IF (@Identificacion_Propietario_Por_Matricula2_Actual <>
@Identificacion_Propietario_Por_Matricula2)



IF isnull(@Identificacion_Propietario_Por_Matricula2_Actual, 0) <>
isnull(@Identificacion_Propietario_Por_Matricula2, 0)
...


AMB

"Eliana Londoño" wrote:

Gracias por contestar...

La condicion con la que tengo el problema es

IF (@Identificacion_Propietario_Por_Matricula2_Actual <>
@Identificacion_Propietario_Por_Matricula2)

Esto NO esta dentro de un SQL, es una condicion para que se haga un insert
en otra tabla. O sea es la comparacion de dos vbles, cuando una de ellas
tiene como valor NULL

Espero que sea mas clara la pregunta...

Otra vez, gracias y espero mas comentarios...

Eliana Londoño
Medellin-Colombia




"Eliana Londoño" escribió en el mensaje
news:
> Buenos dias, tengo el siguiente procesimiento almacenado
> *****************
> CREATE procedure A_prueba
> @Placa_Vehiculo char(10),
> @Identificacion_Propietario_Por_Matricula2 char(15)
> AS
> DECLARE @Identificacion_Propietario_Por_Matricula2_Actual char(15)
> SELECT @Identificacion_Propietario_Por_Matricula2_Actual =
> Identificacion_Propietario_Por_Matricula2
> FROM Vehiculos Where Placa_Vehiculo = @Placa_Vehiculo
> /*-- Si la Id del propietario actual es diferente a la que se envia como
> parametro agregamos un registro en la tabla de Historicos --*/
> SET ANSI_NULLS OFF
> IF (@Identificacion_Propietario_Por_Matricula2_Actual <>
> @Identificacion_Propietario_Por_Matricula2)
> INSERT INTO Vehiculos_Historico (Placa_Vehiculo,
> Identificacion_Propietario_Por_Matricula2)
> VALUES (@Placa_Vehiculo, @Identificacion_Propietario_Por_Matricula2)
> SET ANSI_NULLS ON
> RETURN
> GO
> *****************
> El problema es que cuando uno de los valores viene Nulo, ya sea el que
> recupero de la tabla original o el que se envia como parametro, la
> condicion no se cumple
>
> Estuve leyendo y vi que era por lo del SET ANSI_NULLS (primero no lo
> tenia), pero lo coloque y nada...
> Tambien evalue el valor de las dos vbles y efectivamente una viene como
> NULL y la otra con un valor valido...
>
> Que se les ocurre que pueda estar haciendo de manera equivocada?.. o como
> pueden colaborarme con el problema...
>
> Muchas gracias por sus comentarios...
>
> Eliana Londoño
> Medellin-Colombia
>
>



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida