Ayuda con un SP

24/02/2005 - 11:35 por Pablo Guevara | Informe spam
Hola Grupo,

Aplicando las buenas practicas que he encontrado en el grupo, hice el
siguiente Procedimiento Almacenad:


CREATE PROCEDURE dbo.Elemento_C
@IdElementos bigint=Null,
@Parent bigint = Null,
@TipoElemento bigint = Null

AS

SELECT
[IdElementos],
[IdTipoElemento],
[Nombre],
[Parent],
[Orden],
[URL],
[UsuarioCreacion],
[FechaCreacion],
[UsuarioModificacion],
[FechaModificacion],
[Activo]
FROM
[Elemento]
WHERE
[IdElementos]= IsNull(@IdElementos, IdElementos)
and [Parent] = IsNull(@Parent, Parent)
and [IdTipoElemento] = IsNull(@TipoElemento, [IdTipoElemento])
GO

El problema se presenta cuando uno de los campos es Null, por ejemplo:
Parent, el Sp no me devuelve ningun registro.

¿Hay alguna forma de solucionarlo?

Gracias.

Pablo

+++

Preguntas similare

Leer las respuestas

#1 Carlos Sacristán
24/02/2005 - 11:58 | Informe spam
NULL no es igual a NULL ni a nada, por eso no te va a devolver ningún
registro a menos que lo compares explícitamente con la función <campo> IS
NULL

Por otro lado, no te recomiendo que codifiques las búsquedas del modo
que lo estás haciendo porque estás impidiendo que el motor use índices
útiles que pueda tener esa tabla (puedes comprobarlo en el plan de ejecución
del procedimiento). Para ganar rendimiento es mejor filtrar por aquellos
parámetros que vengan inicializados a un valor diferente de NULL y obviar
los otros


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Pablo Guevara" escribió en el mensaje
news:
Hola Grupo,

Aplicando las buenas practicas que he encontrado en el grupo, hice el
siguiente Procedimiento Almacenad:


CREATE PROCEDURE dbo.Elemento_C
@IdElementos bigint=Null,
@Parent bigint = Null,
@TipoElemento bigint = Null

AS

SELECT
[IdElementos],
[IdTipoElemento],
[Nombre],
[Parent],
[Orden],
[URL],
[UsuarioCreacion],
[FechaCreacion],
[UsuarioModificacion],
[FechaModificacion],
[Activo]
FROM
[Elemento]
WHERE
[IdElementos]= IsNull(@IdElementos, IdElementos)
and [Parent] = IsNull(@Parent, Parent)
and [IdTipoElemento] = IsNull(@TipoElemento, [IdTipoElemento])
GO

El problema se presenta cuando uno de los campos es Null, por ejemplo:
Parent, el Sp no me devuelve ningun registro.

¿Hay alguna forma de solucionarlo?

Gracias.

Pablo

+++


Respuesta Responder a este mensaje
#2 Alejandro Mesa
24/02/2005 - 14:39 | Informe spam
Pablo,

Pudieras usar:

...
WHERE
([IdElementos]= @IdElementos or @IdElementos is null)
and ([Parent] = @Parent or @Parent is null)
and ([IdTipoElemento] = @TipoElemento or @TipoElemento is null)

En cuanto al uso de indices, el operador logico OR impide muchas veces que
sql server pueda hacer uso de ellos.

Ejemplo:

use northwind
go

declare @i int

set @i = null

select
*
from
orders
where
orderid = @i or @i is null
go


|--Bookmark Lookup(BOOKMARK:([Bmk1000]),
OBJECT:([Northwind].[dbo].[Orders]))
|--Index Scan(OBJECT:([Northwind].[dbo].[Orders].[EmployeeID]),
WHERE:([Orders].[OrderID]=[@i] OR [@i]=NULL))


Fijete en el "Index Scan".


AMB


"Pablo Guevara" wrote:

Hola Grupo,

Aplicando las buenas practicas que he encontrado en el grupo, hice el
siguiente Procedimiento Almacenad:


CREATE PROCEDURE dbo.Elemento_C
@IdElementos bigint=Null,
@Parent bigint = Null,
@TipoElemento bigint = Null

AS

SELECT
[IdElementos],
[IdTipoElemento],
[Nombre],
[Parent],
[Orden],
[URL],
[UsuarioCreacion],
[FechaCreacion],
[UsuarioModificacion],
[FechaModificacion],
[Activo]
FROM
[Elemento]
WHERE
[IdElementos]= IsNull(@IdElementos, IdElementos)
and [Parent] = IsNull(@Parent, Parent)
and [IdTipoElemento] = IsNull(@TipoElemento, [IdTipoElemento])
GO

El problema se presenta cuando uno de los campos es Null, por ejemplo:
Parent, el Sp no me devuelve ningun registro.

¿Hay alguna forma de solucionarlo?

Gracias.

Pablo

+++



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida