Error en procedimiento almacenado

04/03/2008 - 10:11 por Cristian Meneses | Informe spam
Buenas a todos.
Tengo varios procedimientos almacenados que tienen la misma logica,
pero este no funciona. La sintaxis esta correcta pero me da error en
ORDER y si lo saco error en AND. Por lo que he visto y comentando
partes, el error esta despues del ELSE, pero no logro verlo. Será la
cantidad de caracteres que puedo ejecutar con un EXEC o algo por el
estilo?

CREATE PROCEDURE [dbo].[GETTiposMaster]
(
@IDTipoMaster int = NULL,
@CodTipoMaster int = NULL,
@SQLFiltro varchar(8000) = NULL
)
AS
IF @SQLFiltro = NULL
SELECT
IDTipoMaster,
CodTipoMaster as 'Cod Tipo Master',
TipoMaster as 'Tipo Master'
FROM TiposMaster
WHERE Eliminado = 0 AND
IDTipoMaster = CASE WHEN @IDTipoMaster = NULL THEN IDTipoMaster
ELSE @IDTipoMaster END AND
CodTipoMaster = CASE WHEN @CodTipoMaster = NULL THEN CodTipoMaster
ELSE @CodTipoMaster END
ORDER BY TipoMaster
ELSE
EXEC('SELECT
IDTipoMaster,
CodTipoMaster as ''Cod Tipo Master'',
TipoMaster as ''Tipo Master''
FROM TiposMaster
WHERE Eliminado = 0 AND ' + @SQLFiltro + ' ORDER BY TipoMaster')
GO

Muchas gracias por adelantado. Atte


Cristian Meneses
SQL Server 2000/2005

Preguntas similare

Leer las respuestas

#6 Cristian Meneses
04/03/2008 - 18:21 | Informe spam
Hola Juan Carlos
Sigue funcionando mal, saque las comillas dobles por [ ] y nada.
Gracias

Cristian Meneses
Respuesta Responder a este mensaje
#7 jcac
04/03/2008 - 18:44 | Informe spam
Cristian,

Cuando te da error cuando ejecutas para la primera parte o la segunda???? o
es indistinto para cualquiera??

Saludos

Juan Carlos

"Cristian Meneses" escribió en el mensaje
news:
Hola Juan Carlos
Sigue funcionando mal, saque las comillas dobles por [ ] y nada.
Gracias

Cristian Meneses
Respuesta Responder a este mensaje
#8 Cristian Meneses
04/03/2008 - 18:49 | Informe spam
Ya esta!!!! Error solucionado..
El error lo daba al ejecutarlo, no habia error de sintaxis al crear el
procedimiento.
El error estaba en el IF, aunque todavia no entiendo como funciona en
otros procedimientos. Parece ser que no hace lo que corresponde IF
@SQLFiltro = NULL, ya que si es un valor NULL no entra sino que lo
hace en el ELSE, luego se encuentra con un AND ' + @SQLFiltro + '
ORDER y dado que esta nulo alli si hay un problema de sintaxis al
quedar el string como "AND ORDER".
Lo solucione haciendo un IF ISNULL(@SQLFiltro, '') = '', no se hay una
forma mas elegante, pero de esta forma si funciono correctamente.
Gracias a todos


Cristian Meneses
Respuesta Responder a este mensaje
#9 Alejandro Mesa
04/03/2008 - 19:15 | Informe spam
Cristian Meneses,

Al menos que tu estes usando "SET ANSI_NULLS OFF" desde la aplicacion
cliente, el tipo de comparacion que se debe usar contra NULL es:

IS [NOT] NULL

Si te fijas en la expresion:

IF @SQLFiltro = NULL

esta siempre dara resultado falso (no importa lo que tenga la variable
SQLFiltro) y por tanto tratara de ejecutar siempre la parte del ELSE:

EXEC('
SELECT IDTipoMaster, CodTipoMaster as [Cod Tipo Master], TipoMaster as [Tipo
Master]
FROM TiposMaster
WHERE Eliminado = 0 AND ' + @SQLFiltro + ' ORDER BY TipoMaster'
)

La cual da error si @SQLFiltro es NULL. La expresion de comparacion debe ser:

IF @SQLFiltro IS NULL
...
ELSE
...

Lo mismo debes hacer en las expresiones que usas en las funciones CASE.

IDTipoMaster = CASE WHEN @IDTipoMaster = NULL THEN IDTipoMaster
ELSE @IDTipoMaster END



IDTipoMaster = CASE WHEN @IDTipoMaster IS NULL THEN IDTipoMaster
ELSE @IDTipoMaster END


AMB

"Cristian Meneses" wrote:

Buenas a todos.
Tengo varios procedimientos almacenados que tienen la misma logica,
pero este no funciona. La sintaxis esta correcta pero me da error en
ORDER y si lo saco error en AND. Por lo que he visto y comentando
partes, el error esta despues del ELSE, pero no logro verlo. Será la
cantidad de caracteres que puedo ejecutar con un EXEC o algo por el
estilo?

CREATE PROCEDURE [dbo].[GETTiposMaster]
(
@IDTipoMaster int = NULL,
@CodTipoMaster int = NULL,
@SQLFiltro varchar(8000) = NULL
)
AS
IF @SQLFiltro = NULL
SELECT
IDTipoMaster,
CodTipoMaster as 'Cod Tipo Master',
TipoMaster as 'Tipo Master'
FROM TiposMaster
WHERE Eliminado = 0 AND
IDTipoMaster = CASE WHEN @IDTipoMaster = NULL THEN IDTipoMaster
ELSE @IDTipoMaster END AND
CodTipoMaster = CASE WHEN @CodTipoMaster = NULL THEN CodTipoMaster
ELSE @CodTipoMaster END
ORDER BY TipoMaster
ELSE
EXEC('SELECT
IDTipoMaster,
CodTipoMaster as ''Cod Tipo Master'',
TipoMaster as ''Tipo Master''
FROM TiposMaster
WHERE Eliminado = 0 AND ' + @SQLFiltro + ' ORDER BY TipoMaster')
GO

Muchas gracias por adelantado. Atte


Cristian Meneses
SQL Server 2000/2005


Respuesta Responder a este mensaje
#10 Luis Tarzia
04/03/2008 - 19:37 | Informe spam
El error lo da al crearlo o al ejecutarlo ????
"Cristian Meneses" escribió en el mensaje
news:
Hola Juan Carlos
Sigue funcionando mal, saque las comillas dobles por [ ] y nada.
Gracias

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