Usar nombre de columna en procedimiento almacenado

03/07/2006 - 14:29 por Hugo Gsell | Informe spam
Hola... tengo el siguiente procedimiento almacenado... que recibe como
parametro un registro idpaso y descripción.
Al grabar el proc.. genera su propio 'nuevo número` . lo que necesito es
que si el pIdPaso que viene como parametros es distinto que el nuevo valor
generado en la linea INSERT INTO Pasos SELECT ISNULL(MAX(IdPaso), 0)+1 ,
@pdescripcion FROM Pasos me devuelva este nuevo valor en la variable
de retorno @NROFILA

ALTER PROCEDURE [dbo].[GrabaPasos]
@pIdPaso smallint,
@pDescripcion varchar(50)--,
AS
SET nocount ON
DECLARE @error int
SET transaction isolation level SERIALIZABLE
BEGIN transaction
INSERT INTO Pasos
SELECT ISNULL(MAX(IdPaso), 0)+1 , @pdescripcion
FROM Pasos
SET @error = @@error
IF @error != 0
BEGIN
ROLLBACK TRANSACTION
RETURN -1
END
ELSE
BEGIN
IF pIdPaso != IdPaso --aca seria donde debo hacer el control
BEGIN
PRINT 'ESTO NO FUNCA'
END
END

SET @error =@@error

COMMIT TRANSACTION

RETURN @Error

Preguntas similare

Leer las respuestas

#1 Maxi
03/07/2006 - 14:38 | Informe spam
Hola, no te recomiendo esa manera para numerar, te paso este articulo donde
se explica otra tecnica que quizas te sienta mejor

http://www.microsoft.com/spanish/ms...art187.asp


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"Hugo Gsell" escribió en el mensaje
news:
Hola... tengo el siguiente procedimiento almacenado... que recibe como
parametro un registro idpaso y descripción.
Al grabar el proc.. genera su propio 'nuevo número` . lo que necesito
es que si el pIdPaso que viene como parametros es distinto que el nuevo
valor generado en la linea INSERT INTO Pasos SELECT ISNULL(MAX(IdPaso),
0)+1 , @pdescripcion FROM Pasos me devuelva este nuevo valor en la
variable de retorno @NROFILA

ALTER PROCEDURE [dbo].[GrabaPasos]
@pIdPaso smallint,
@pDescripcion varchar(50)--,
AS
SET nocount ON
DECLARE @error int
SET transaction isolation level SERIALIZABLE
BEGIN transaction
INSERT INTO Pasos
SELECT ISNULL(MAX(IdPaso), 0)+1 , @pdescripcion
FROM Pasos
SET @error = @@error
IF @error != 0
BEGIN
ROLLBACK TRANSACTION
RETURN -1
END
ELSE
BEGIN
IF pIdPaso != IdPaso --aca seria donde debo hacer el control
BEGIN
PRINT 'ESTO NO FUNCA'
END
END

SET @error =@@error

COMMIT TRANSACTION

RETURN @Error

Respuesta Responder a este mensaje
#2 Hugo Gsell
03/07/2006 - 15:50 | Informe spam
Si. Esto ya lo se. Pero es una tabla base. No va a tener muchos datos. A lo
sumo 100 registros. Pero en el momento de su carga (configuración de cada
sistema instalado) puede ser concurrente... de todas formas mi problema no
es ese si no como devolver el nro real de registro grabado.
Ágradezco la intención y muy bueno el artículo, además ya lo he solucionado.
Gracias nuevamente. te paso como me quedó el procedimiento almacenado:

set ANSI_NULLS ON

set QUOTED_IDENTIFIER ON

go



ALTER PROCEDURE [dbo].[GrabaPasos]


@pIdPaso smallint ,

@pDescripcion varchar(50),

@ErrorDev as int output

AS

SET nocount ON

DECLARE @error int

DECLARE @NuevoNro smallint

SET transaction isolation level SERIALIZABLE

BEGIN transaction



SET NOCOUNT ON;

SELECT @NuevoNro = MAX(IdPaso) FROM Pasos

SET @NuevoNro = @NuevoNro + 1

INSERT INTO Pasos (IdPaso,Descripcion) VALUES(@NuevoNro,@pDescripcion)




SET @error = @@error

IF @error != 0

BEGIN

ROLLBACK TRANSACTION

RETURN -1

END

ELSE

BEGIN

IF @pIdPaso != @NuevoNro

BEGIN

SET @pidpaso = @NuevoNro

END

END

SET @error =@@error


COMMIT TRANSACTION

RETURN













"Maxi" escribió en el mensaje
news:
Hola, no te recomiendo esa manera para numerar, te paso este articulo
donde se explica otra tecnica que quizas te sienta mejor

http://www.microsoft.com/spanish/ms...art187.asp


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"Hugo Gsell" escribió en el mensaje
news:
Hola... tengo el siguiente procedimiento almacenado... que recibe como
parametro un registro idpaso y descripción.
Al grabar el proc.. genera su propio 'nuevo número` . lo que necesito
es que si el pIdPaso que viene como parametros es distinto que el nuevo
valor generado en la linea INSERT INTO Pasos SELECT ISNULL(MAX(IdPaso),
0)+1 , @pdescripcion FROM Pasos me devuelva este nuevo valor en la
variable de retorno @NROFILA

ALTER PROCEDURE [dbo].[GrabaPasos]
@pIdPaso smallint,
@pDescripcion varchar(50)--,
AS
SET nocount ON
DECLARE @error int
SET transaction isolation level SERIALIZABLE
BEGIN transaction
INSERT INTO Pasos
SELECT ISNULL(MAX(IdPaso), 0)+1 , @pdescripcion
FROM Pasos
SET @error = @@error
IF @error != 0
BEGIN
ROLLBACK TRANSACTION
RETURN -1
END
ELSE
BEGIN
IF pIdPaso != IdPaso --aca seria donde debo hacer el control
BEGIN
PRINT 'ESTO NO FUNCA'
END
END

SET @error =@@error

COMMIT TRANSACTION

RETURN @Error





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