Procedimiento Almacenado (If)
Publicado por Marta (8 intervenciones) el 06/03/2007 11:45:48
Necesito ayuda sobre el siguiente procedimiento almacenado,ya que me da el siguiente error y se vuelve "loco" a la hora de grabar registros.
El error es que COMMIT TRANSACTION necesita un BEGIN TRANSACTION y no se muy bien como hacerlo.
CREATE PROCEDURE CopiaCitaciones_Rodajes
(
@Citacion_Id_Origen int,
@Citacion_Id_Nueva int,
@UsuarioAlta_Id varchar(100)
)
AS
DECLARE @Figurante_Id int
DECLARE @Personaje_Id int
DECLARE @TipoFiguracion_Id int
DECLARE @Citado numeric(1,0)
DECLARE @AltaSS numeric(1,0)
DECLARE @NoAsistencia numeric(1,0)
DECLARE @Num numeric(1,0)
DECLARE cOrigen CURSOR FOR Select Figurante_Id, Personaje_Id, TipoFiguracion_Id,Citado, AltaSS,NoAsistencia from Citaciones_Rodajes where citacion_id = @Citacion_Id_Origen
OPEN cOrigen
FETCH NEXT FROM cOrigen into @Figurante_Id, @Personaje_Id, @TipoFiguracion_Id,@Citado, @AltaSS,@NoAsistencia
WHILE @@FETCH_STATUS = 0
BEGIN
*** Aquí intento extraer una serie de códigos para que no grabe repetidos ****
set @num = (Select count(*) as num from Citaciones_Rodajes where Citacion_Id = @Citacion_Id_Nueva and Figurante_Id = isnull(@Figurante_Id,0))
**** Si el resultado de la select es 0 se supone que debería grabar.... ****
if @num = 0
BEGIN TRANSACTION
INSERT INTO Citaciones_Rodajes (Citacion_Id,FechaAlta,Figurante_Id, Personaje_Id,TipoFiguracion_Id,Citado,AltaSS,NoAsistencia,UsuarioAlta_Id)
VALUES (@Citacion_Id_Nueva, getdate(), isnull(@Figurante_Id,0), @Personaje_Id, @TipoFiguracion_Id,@Citado, @AltaSS,@NoAsistencia,@UsuarioAlta_Id)
if @@error=0
COMMIT TRAN
else
ROLLBACK TRAN
end
FETCH NEXT FROM cOrigen into @Figurante_Id, @Personaje_Id, @TipoFiguracion_Id,@Citado, @AltaSS,@NoAsistencia
CLOSE cOrigen
DEALLOCATE cOrigen
GO
Gracias
El error es que COMMIT TRANSACTION necesita un BEGIN TRANSACTION y no se muy bien como hacerlo.
CREATE PROCEDURE CopiaCitaciones_Rodajes
(
@Citacion_Id_Origen int,
@Citacion_Id_Nueva int,
@UsuarioAlta_Id varchar(100)
)
AS
DECLARE @Figurante_Id int
DECLARE @Personaje_Id int
DECLARE @TipoFiguracion_Id int
DECLARE @Citado numeric(1,0)
DECLARE @AltaSS numeric(1,0)
DECLARE @NoAsistencia numeric(1,0)
DECLARE @Num numeric(1,0)
DECLARE cOrigen CURSOR FOR Select Figurante_Id, Personaje_Id, TipoFiguracion_Id,Citado, AltaSS,NoAsistencia from Citaciones_Rodajes where citacion_id = @Citacion_Id_Origen
OPEN cOrigen
FETCH NEXT FROM cOrigen into @Figurante_Id, @Personaje_Id, @TipoFiguracion_Id,@Citado, @AltaSS,@NoAsistencia
WHILE @@FETCH_STATUS = 0
BEGIN
*** Aquí intento extraer una serie de códigos para que no grabe repetidos ****
set @num = (Select count(*) as num from Citaciones_Rodajes where Citacion_Id = @Citacion_Id_Nueva and Figurante_Id = isnull(@Figurante_Id,0))
**** Si el resultado de la select es 0 se supone que debería grabar.... ****
if @num = 0
BEGIN TRANSACTION
INSERT INTO Citaciones_Rodajes (Citacion_Id,FechaAlta,Figurante_Id, Personaje_Id,TipoFiguracion_Id,Citado,AltaSS,NoAsistencia,UsuarioAlta_Id)
VALUES (@Citacion_Id_Nueva, getdate(), isnull(@Figurante_Id,0), @Personaje_Id, @TipoFiguracion_Id,@Citado, @AltaSS,@NoAsistencia,@UsuarioAlta_Id)
if @@error=0
COMMIT TRAN
else
ROLLBACK TRAN
end
FETCH NEXT FROM cOrigen into @Figurante_Id, @Personaje_Id, @TipoFiguracion_Id,@Citado, @AltaSS,@NoAsistencia
CLOSE cOrigen
DEALLOCATE cOrigen
GO
Gracias
Valora esta pregunta


0