if exists syntax - consulta

06/01/2009 - 23:20 por arturohm | Informe spam
Buenos dias,

tengo el siguiente SP, cuando pruebo bloque x bloque funciona
correctamente, pero cuando ejecuto o pruebo todo el SP, no obtengo
nada como resultado, los parametos que ingresan son de la forma:
"usuario1" y "Carpeta\archivo.ext" y como resultado de salida debo
obtener 1 o 0, pero no obtengo nada, cualquier ayuda lo agradeceria
mucho:


ALTER PROCEDURE [dbo].[USP_PERFIL_VERIFICAR]
(
@USUARIO VARCHAR(24),
@FORM VARCHAR(256),
@RES INT OUTPUT
)
AS
BEGIN

DECLARE @VARPERFIL INT,@VARAPLICACION INT;
SET @VARPERFIL = (SELECT CONVERT(INT ,RTRIM(USUARIOS.PERFILID))
FROM USUARIOS
WHERE ESTADO = 1 AND RTRIM(USUARIOS.USUARIO) = @USUARIO)
SET @VARAPLICACION = (SELECT APLICACIONES.APLICACIONID
FROM APLICACIONES
WHERE ESTADO = 1 AND RTRIM(APLICACIONES.RUTA) = @FORM)
IF EXISTS(
SELECT ACCESOS.PERFILID,ACCESOS.APLICACIONID
FROM ACCESOS
WHERE ACCESOS.PERFILID = @VARPERFIL AND ACCESOS.APLICACIONID @VARAPLICACION AND
ACCESOS.ESTADO = 1
)
BEGIN
SET @RES = 1
END
ELSE
BEGIN
SET @RES = 0
END

END
GO

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
07/01/2009 - 01:54 | Informe spam
No veo ningun error a primera vista. Lo unico seria agregar "set nocount on"
como primera instrucion para evitar que el mensaje de filas afectadas sea
devuelto a la aplicacion cliente y tengas que recorrer mas de un resultado.

Tambien puedes usar las dos primeras sentencias directamente con la ultima.

ALTER PROCEDURE [dbo].[USP_PERFIL_VERIFICAR]
(
@USUARIO VARCHAR(24),
@FORM VARCHAR(256),
@RES INT OUTPUT
)
AS

SET NOCOUNT ON

IF EXISTS(
SELECT
*
FROM
ACCESOS
WHERE
ACCESOS.PERFILID = (SELECT CONVERT(INT ,RTRIM(USUARIOS.PERFILID)) FROM
USUARIOS WHERE ESTADO = 1 AND USUARIOS.USUARIO = @USUARIO)
AND ACCESOS.APLICACIONID = (SELECT APLICACIONES.APLICACIONID FROM
APLICACIONES WHERE ESTADO = 1 AND APLICACIONES.RUTA = @FORM)
AND ACCESOS.ESTADO = 1
)
SET @RES = 1
ELSE
SET @RES = 0
GO

Desde donde estas ejecutando este sp para probar el resultado?


AMB



"arturohm" wrote:

Buenos dias,

tengo el siguiente SP, cuando pruebo bloque x bloque funciona
correctamente, pero cuando ejecuto o pruebo todo el SP, no obtengo
nada como resultado, los parametos que ingresan son de la forma:
"usuario1" y "Carpeta\archivo.ext" y como resultado de salida debo
obtener 1 o 0, pero no obtengo nada, cualquier ayuda lo agradeceria
mucho:


ALTER PROCEDURE [dbo].[USP_PERFIL_VERIFICAR]
(
@USUARIO VARCHAR(24),
@FORM VARCHAR(256),
@RES INT OUTPUT
)
AS
BEGIN

DECLARE @VARPERFIL INT,@VARAPLICACION INT;
SET @VARPERFIL = (SELECT CONVERT(INT ,RTRIM(USUARIOS.PERFILID))
FROM USUARIOS
WHERE ESTADO = 1 AND RTRIM(USUARIOS.USUARIO) = @USUARIO)
SET @VARAPLICACION = (SELECT APLICACIONES.APLICACIONID
FROM APLICACIONES
WHERE ESTADO = 1 AND RTRIM(APLICACIONES.RUTA) = @FORM)
IF EXISTS(
SELECT ACCESOS.PERFILID,ACCESOS.APLICACIONID
FROM ACCESOS
WHERE ACCESOS.PERFILID = @VARPERFIL AND ACCESOS.APLICACIONID > @VARAPLICACION AND
ACCESOS.ESTADO = 1
)
BEGIN
SET @RES = 1
END
ELSE
BEGIN
SET @RES = 0
END

END
GO

Respuesta Responder a este mensaje
#2 arturohm
07/01/2009 - 15:19 | Informe spam
Estoy haciendo las pruebas desde el SQL Server Management Studio, los
parametros a suministrar son de la forma: @usuario = aherrera y
@form = ModuloAdministracion/Administracion.aspx

al ingresar estos datos, debe tener como resultado para el 1er bloque
el valor de 2, para el 2do bloque 4, y en el 3er bloque con estos
valores 2 y 4, debo tener 1 como resultado final. como comente antes
al probar bloque x bloque funciona, pero cuando pruebo todo el SP al
imprimir la variable @res, no obtengo nada.
Gracias por la ayuda.
Respuesta Responder a este mensaje
#3 Jhonny Vargas P.
07/01/2009 - 17:03 | Informe spam
Hola,

Cuando ejecutes el SP debes especificar que el parametro RES es output,
ejemplo:

DECLARE @RES INT
EXEC USP_PERFIL_VERIFICAR '', '', @RES OUTPUT

SELECT @RES



por otro lado... podrías dejar todo en un solo bloque en el SP... mira el
ejemplo:

ALTER PROCEDURE [dbo].[USP_PERFIL_VERIFICAR]
(
@USUARIO VARCHAR(24),
@FORM VARCHAR(256),
@RES INT OUTPUT
)
AS
BEGIN

SET NOCOUNT ON

IF EXISTS(SELECT TOP 1 ACCESOS.PERFILID
FROM ACCESOS AC
INNER JOIN USUARIOS US ON (AC.PERFILID = US.PERFILID)
INNER JOIN APLICACIONES AP ON (AC.APLICACIONID =
AP.APLICACIONID)
WHERE RTRIM(US.USUARIO) = @USUARIO AND
RTRIM(AP.RUTA) = @FORM AND
US.ESTADO = 1 AND
AP.ESTADO = 1 AND
UC.ESTADO = 1 )
SET @RES = 1
ELSE
SET @RES = 0

END



Saludos,
Jhonny Vargas P.
Santiago de Chile


"arturohm" escribió en el mensaje de
noticias:
Buenos dias,

tengo el siguiente SP, cuando pruebo bloque x bloque funciona
correctamente, pero cuando ejecuto o pruebo todo el SP, no obtengo
nada como resultado, los parametos que ingresan son de la forma:
"usuario1" y "Carpeta\archivo.ext" y como resultado de salida debo
obtener 1 o 0, pero no obtengo nada, cualquier ayuda lo agradeceria
mucho:


ALTER PROCEDURE [dbo].[USP_PERFIL_VERIFICAR]
(
@USUARIO VARCHAR(24),
@FORM VARCHAR(256),
@RES INT OUTPUT
)
AS
BEGIN

DECLARE @VARPERFIL INT,@VARAPLICACION INT;
SET @VARPERFIL = (SELECT CONVERT(INT ,RTRIM(USUARIOS.PERFILID))
FROM USUARIOS
WHERE ESTADO = 1 AND RTRIM(USUARIOS.USUARIO) = @USUARIO)
SET @VARAPLICACION = (SELECT APLICACIONES.APLICACIONID
FROM APLICACIONES
WHERE ESTADO = 1 AND RTRIM(APLICACIONES.RUTA) = @FORM)
IF EXISTS(
SELECT ACCESOS.PERFILID,ACCESOS.APLICACIONID
FROM ACCESOS
WHERE ACCESOS.PERFILID = @VARPERFIL AND ACCESOS.APLICACIONID > @VARAPLICACION AND
ACCESOS.ESTADO = 1
)
BEGIN
SET @RES = 1
END
ELSE
BEGIN
SET @RES = 0
END

END
GO
Respuesta Responder a este mensaje
#4 arturohm
07/01/2009 - 18:38 | Informe spam
Gracias por la ayuda, ahora funciona correctamente el SP.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida