¿Como utilizar campos de un select en un proc.almacenado?

28/07/2006 - 12:22 por Hugo Gsell | Informe spam
Hola. Tengo un procedimiento almacenado que me debe devolver varios campos
de una tabla,
para lo cual le paso como parametros de salida los mismos.
Lo que no puedo realizar es la asiganción luego del select de los campos
devuelvtos por la consulta
a los campos que necesito me devuelva la consulta.. este es el procedimiento
almacenado:
digamos lo que falla es abajo, la asignación... SET @psIdUsuario =IdUsuario

CREATE PROCEDURE [dbo].[RecuperaUsuario]
@pNombre varchar(50),
@pContrasena varchar(50), --Hash / Encriptada de la contraseña es lo que se
guarda
@psIdUsuario smallint output,
@psNombre varchar(50) output,
@psContrasena varchar(50) output,
@psFechaAlta smalldatetime output,
@psFechaCambioContrasena smalldatetime output,
@psNivel smallint output

AS
SET NOCOUNT ON
DECLARE @error int
DECLARE @NroRegsAfectados smallint
BEGIN
SET NOCOUNT ON;

SELECT IdUsuario FROM Usuarios WHERE Nombre=@pNombre AND
Contrasena=@pContrasena
SELECT @error = @@ERROR,@NroRegsAfectados = @@ROWCOUNT
IF @NroRegsAfectados=1
BEGIN
END
END
RETURN @error
GO

Preguntas similare

Leer las respuestas

#1 Alvaro Mosquera
28/07/2006 - 13:44 | Informe spam
La asignación tiene que ser cuando lees el registro.
SELECT @psIdUsuario = IdUsuario , @psNombre = nombre ,... FROM Usuarios
WHERE Nombre=@pNombre AND
Contrasena=@pContrasena


"Hugo Gsell" escribió:

Hola. Tengo un procedimiento almacenado que me debe devolver varios campos
de una tabla,
para lo cual le paso como parametros de salida los mismos.
Lo que no puedo realizar es la asiganción luego del select de los campos
devuelvtos por la consulta
a los campos que necesito me devuelva la consulta.. este es el procedimiento
almacenado:
digamos lo que falla es abajo, la asignación... SET @psIdUsuario =IdUsuario

CREATE PROCEDURE [dbo].[RecuperaUsuario]
@pNombre varchar(50),
@pContrasena varchar(50), --Hash / Encriptada de la contraseña es lo que se
guarda
@psIdUsuario smallint output,
@psNombre varchar(50) output,
@psContrasena varchar(50) output,
@psFechaAlta smalldatetime output,
@psFechaCambioContrasena smalldatetime output,
@psNivel smallint output

AS
SET NOCOUNT ON
DECLARE @error int
DECLARE @NroRegsAfectados smallint
BEGIN
SET NOCOUNT ON;

SELECT IdUsuario FROM Usuarios WHERE Nombre=@pNombre AND
Contrasena=@pContrasena
SELECT @error = @@ERROR,@NroRegsAfectados = @@ROWCOUNT
IF @NroRegsAfectados=1
BEGIN
END
END
RETURN @error
GO



Respuesta Responder a este mensaje
#2 Miguel Egea
28/07/2006 - 13:46 | Informe spam
de una parte tendrías que hacer es algo así

CREATE PROCEDURE [dbo].[RecuperaUsuario]
@pNombre varchar(50),
@pContrasena varchar(50), --Hash / Encriptada de la contraseña es lo que se
guarda
@psIdUsuario smallint output,
@psNombre varchar(50) output,
@psContrasena varchar(50) output,
@psFechaAlta smalldatetime output,
@psFechaCambioContrasena smalldatetime output,
@psNivel smallint output

AS
SET NOCOUNT ON
DECLARE @error int
DECLARE @NroRegsAfectados smallint
BEGIN
SET NOCOUNT ON;

select @psidusuario=idusuario,@xx. from usuarios WHERE Nombre=@pNombre
AND
Contrasena=@pContrasena
SELECT @error = @@ERROR
return @error

si no tienen valores valdrán null, también podrías hacerlo sin parámetros de
salida y te quedaría mas sencillo, en tu aplicación .net usas un datatable o
un datareader y compruebas si hay o no registros, tan solo tendrías que
ejecutar un select.



"Hugo Gsell" wrote in message
news:%
Hola. Tengo un procedimiento almacenado que me debe devolver varios campos
de una tabla,
para lo cual le paso como parametros de salida los mismos.
Lo que no puedo realizar es la asiganción luego del select de los campos
devuelvtos por la consulta
a los campos que necesito me devuelva la consulta.. este es el
procedimiento almacenado:
digamos lo que falla es abajo, la asignación... SET @psIdUsuario
=IdUsuario

CREATE PROCEDURE [dbo].[RecuperaUsuario]
@pNombre varchar(50),
@pContrasena varchar(50), --Hash / Encriptada de la contraseña es lo que
se guarda
@psIdUsuario smallint output,
@psNombre varchar(50) output,
@psContrasena varchar(50) output,
@psFechaAlta smalldatetime output,
@psFechaCambioContrasena smalldatetime output,
@psNivel smallint output

AS
SET NOCOUNT ON
DECLARE @error int
DECLARE @NroRegsAfectados smallint
BEGIN
SET NOCOUNT ON;

SELECT IdUsuario FROM Usuarios WHERE Nombre=@pNombre AND
Contrasena=@pContrasena
SELECT @error = @@ERROR,@NroRegsAfectados = @@ROWCOUNT
IF @NroRegsAfectados=1
BEGIN
END
END
RETURN @error
GO


Respuesta Responder a este mensaje
#3 Hugo Gsell
28/07/2006 - 13:52 | Informe spam
Gracias. Aparentemente funciona de 10.

Ahora una duda adicional... en otro tipo de "recuperación" ¿que sucede si
los registros devueltos son mas de 1?
ó ninguno?
¿puedo utilizar @@rowcount para saber la cantidad de registros procesados?
las situaciones son
que de 0.. en este caso esta ok.
que de 1... si existe al menos 1 supongo que dara 1.
ahora si existen varios rowcount ¿devolverá este valor? o va a dar 1 porque
el select hace una asignación del primero encontrado?

Hugo A. Gsell
Sgo del Estero
Argentina

"Alvaro Mosquera" escribió en el
mensaje news:
La asignación tiene que ser cuando lees el registro.
SELECT @psIdUsuario = IdUsuario , @psNombre = nombre ,... FROM Usuarios
WHERE Nombre=@pNombre AND
Contrasena=@pContrasena


"Hugo Gsell" escribió:

Hola. Tengo un procedimiento almacenado que me debe devolver varios
campos
de una tabla,
para lo cual le paso como parametros de salida los mismos.
Lo que no puedo realizar es la asiganción luego del select de los campos
devuelvtos por la consulta
a los campos que necesito me devuelva la consulta.. este es el
procedimiento
almacenado:
digamos lo que falla es abajo, la asignación... SET @psIdUsuario
=IdUsuario

CREATE PROCEDURE [dbo].[RecuperaUsuario]
@pNombre varchar(50),
@pContrasena varchar(50), --Hash / Encriptada de la contraseña es lo que
se
guarda
@psIdUsuario smallint output,
@psNombre varchar(50) output,
@psContrasena varchar(50) output,
@psFechaAlta smalldatetime output,
@psFechaCambioContrasena smalldatetime output,
@psNivel smallint output

AS
SET NOCOUNT ON
DECLARE @error int
DECLARE @NroRegsAfectados smallint
BEGIN
SET NOCOUNT ON;

SELECT IdUsuario FROM Usuarios WHERE Nombre=@pNombre AND
Contrasena=@pContrasena
SELECT @error = @@ERROR,@NroRegsAfectados = @@ROWCOUNT
IF @NroRegsAfectados=1
BEGIN
END
END
RETURN @error
GO



Respuesta Responder a este mensaje
#4 Miguel Egea
28/07/2006 - 14:03 | Informe spam
Te dará los datos de 1 de ellos pero solo 1, eso deberías prevenirlo
poniendo un índice único sobre usuario,

Saludos
Miguel Egea
"Hugo Gsell" wrote in message
news:%
Gracias. Aparentemente funciona de 10.

Ahora una duda adicional... en otro tipo de "recuperación" ¿que sucede si
los registros devueltos son mas de 1?
ó ninguno?
¿puedo utilizar @@rowcount para saber la cantidad de registros procesados?
las situaciones son
que de 0.. en este caso esta ok.
que de 1... si existe al menos 1 supongo que dara 1.
ahora si existen varios rowcount ¿devolverá este valor? o va a dar 1
porque el select hace una asignación del primero encontrado?

Hugo A. Gsell
Sgo del Estero
Argentina

"Alvaro Mosquera" escribió en
el mensaje news:
La asignación tiene que ser cuando lees el registro.
SELECT @psIdUsuario = IdUsuario , @psNombre = nombre ,... FROM Usuarios
WHERE Nombre=@pNombre AND
Contrasena=@pContrasena


"Hugo Gsell" escribió:

Hola. Tengo un procedimiento almacenado que me debe devolver varios
campos
de una tabla,
para lo cual le paso como parametros de salida los mismos.
Lo que no puedo realizar es la asiganción luego del select de los campos
devuelvtos por la consulta
a los campos que necesito me devuelva la consulta.. este es el
procedimiento
almacenado:
digamos lo que falla es abajo, la asignación... SET @psIdUsuario
=IdUsuario

CREATE PROCEDURE [dbo].[RecuperaUsuario]
@pNombre varchar(50),
@pContrasena varchar(50), --Hash / Encriptada de la contraseña es lo
que se
guarda
@psIdUsuario smallint output,
@psNombre varchar(50) output,
@psContrasena varchar(50) output,
@psFechaAlta smalldatetime output,
@psFechaCambioContrasena smalldatetime output,
@psNivel smallint output

AS
SET NOCOUNT ON
DECLARE @error int
DECLARE @NroRegsAfectados smallint
BEGIN
SET NOCOUNT ON;

SELECT IdUsuario FROM Usuarios WHERE Nombre=@pNombre AND
Contrasena=@pContrasena
SELECT @error = @@ERROR,@NroRegsAfectados = @@ROWCOUNT
IF @NroRegsAfectados=1
BEGIN
END
END
RETURN @error
GO









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