Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: crisoof en 6 Agosto 2019, 20:47 pm



Título: Error procedimiento almacenado no lo puedo sacar!!
Publicado por: crisoof en 6 Agosto 2019, 20:47 pm
Buenas tardes amiguetes!!

solicito su ayuda, tengo un error en un procedimiento almacenado en sql server, la falla radica en que no esta entranddo a realizar los insert, realiza los update y delete pero no los insert, porfavor si alguno me puede ayudar se lo agradeceria muchisimo, le he dado muchas vueltas y no tengo solucion
Código:
USE [Gestion]
GO
/****** Object:  StoredProcedure [dbo].[GES_Pre_Tienda_Guardar]    Script Date: 6/8/2019 12:10:25 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Cristofer Martinez
-- Create date: 05-08-2019
-- Description: Guarda GPC, Temporada y el ID log
-- =============================================
ALTER PROCEDURE [dbo].[GES_Pre_Tienda_Guardar]
@Cod_Tienda As Varchar(50),
@Ges_Pre_GPCTienda As Ges_Pre_GPCTienda Readonly,
@Ges_Pre_PorcTemporada As Ges_Pre_PorcTemporada Readonly,
@Status    As Integer OutPut
AS
BEGIN

SET NOCOUNT ON;

Declare @Error VarChar(500)
Declare @Id Varchar(50)
Begin Try
Begin Transaction
If not Exists( Select 1
From Gestion.dbo.Ges_Pre_PresupuestoTiendaGpc gpc With(Nolock)
Inner Join  @Ges_Pre_GPCTienda pre
On gpc.Id_PreTieGpc = pre.Id_PreTieGpc)
Begin
--Insert GPC
print ('insert gpc')
Insert Into Ges_Pre_PresupuestoTiendaGpc
(
Id_PreTieGpc, Cod_Tienda, Cod_Gpc, Presupuesto, Utilizado, Stock, Usuario, Fecha_Creacion, Estacion
)
Select gpc.Id_PreTieGpc, gpc.Cod_Tienda, gpc.Cod_Gpc, gpc.Presupuesto,0, gpc.Stock, gpc.Usuario,getdate(), gpc.Estacion
From @Ges_Pre_GPCTienda gpc
Where gpc.nuevo = 'S'

If @@ERROR <> 0
Begin
Set @Status = 0
Rollback Tran
Return @Status
End

SET @Status = 1
SET @Error = 'OK'
SELECT @Error AS ERROR
End
Else
Begin
--- Actualiza GPC
print('Update GPC')
UPDATE Ges_Pre_PresupuestoTiendaGpc
SET stock = gpc.Stock, Presupuesto = gpc.Presupuesto,
Fecha_Creacion = GETDATE(), Usuario = gpc.Usuario, Estacion = gpc.Estacion
FROM Ges_Pre_PresupuestoTiendaGpc c
INNER JOIN @Ges_Pre_GPCTienda gpc
ON c.Id_PreTieGpc = gpc.Id_PreTieGpc
Where gpc.nuevo = 'N'

If @@ERROR <> 0
Begin
Set @Status = 0
Rollback Tran
Return @Status
End

SET @Status = 1
SET @Error = 'OK'
SELECT @Error AS ERROR

End

If Not Exists( Select tem.Id_PreTemp
From Gestion.dbo.Ges_Pre_PorcentajeTemporada tem With(Nolock)
Inner Join  @Ges_Pre_PorcTemporada pre
On tem.Id_PreTemp = pre.Id_PreTemp)
Begin
---Insert temporada
print ('Insert temporada')
Insert into Gestion.dbo.Ges_Pre_PorcentajeTemporada
(
Id_PreTemp, Cod_Tienda,Cod_PreTemporada, Cod_PreAnual, Cod_Temporada, Porcentaje, Usuario, Fecha_Creacion, Estacion
)

Select Id_PreTemp, Cod_tienda, Cod_Pretemporada, Cod_PreAnual, Cod_Temporada, Descuento,  Usuario, GETDATE(), Estacion
From @Ges_Pre_PorcTemporada
Where Nuevo = 'S'

If @@ERROR <> 0
Begin
Set @Status = 0
Rollback Tran
Return @Status
End
End
Else
Begin
--- Borra temporada
print ('delete temporada')
Delete temp
From Gestion.dbo.Ges_Pre_PorcentajeTemporada temp
Left join @Ges_Pre_PorcTemporada pre
On temp.Id_PreTemp = pre.Id_PreTemp
Where pre.Id_PreTemp = null
And pre.Nuevo = 'N'

If @@ERROR <> 0
Begin
Set @Status = 0
Rollback Tran
Return @Status
End

SET @Status = 1
SET @Error = 'OK'
SELECT @Error AS ERROR

--- actualiza temporada
Print('Update Temporada')
Update temp
Set Porcentaje = pre.Descuento
From Gestion.dbo.Ges_Pre_PorcentajeTemporada Temp
Inner join @Ges_Pre_PorcTemporada pre
On Temp.Id_PreTemp = pre.Id_PreTemp
Where pre.Nuevo = 'N'

If @@ERROR <> 0
Begin
Set @Status = 0
Rollback Tran
Return @Status
End

SET @Status = 1
SET @Error = 'OK'
SELECT @Error AS ERROR

End
Print ('Insert ID')
--Insert Validacion Usuario
Insert into Ges_pre_log (Cod_tienda)
Values
(
@Cod_Tienda
)

If @@ERROR <> 0
Begin
Set @Status = 0
Rollback Tran
Return @Status
End

Commit Transaction
SET @Status = 1
SET @Error = 'OK'
SELECT @Error AS ERROR
RETURN @Status
End Try
Begin Catch
If @@TRANCOUNT > 0
Begin
SELECT ERROR_MESSAGE() AS ErrorMessage;
Rollback Transaction
Set @Status = 0
Set @Error = 'try'
--Print  @@Error
Select @Error AS ERROR
Return @Status
END
Else
Begin
SELECT ERROR_MESSAGE() AS ErrorMessage;
Set @Status = 0
Set @Error = 'try'
--Print  @@Error
Select @Error AS ERROR
Return @Status
End
End Catch   
END


Muchas gracias por su ayuda


Título: Re: Error procedimiento almacenado no lo puedo sacar!!
Publicado por: crisoof en 6 Agosto 2019, 21:29 pm
Buenas gente,

Dudo que el procedimiento les pueda servir pero quizas parte del codigo,

el problema esta en que el delete estaba haciendo algo que no queria y ademas movi el delete a un if por separado les copio el codigo algo de ahi quizas puedan reciclar


Código:
USE [Gestion]
GO
/****** Object:  StoredProcedure [dbo].[GES_Pre_Tienda_Guardar]    Script Date: 6/8/2019 12:10:25 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Cristofer Martinez
-- Create date: 05-08-2019
-- Description: Guarda GPC, Temporada y el ID log
-- =============================================
ALTER PROCEDURE [dbo].[GES_Pre_Tienda_Guardar]
@Cod_Tienda As Varchar(50),
@Ges_Pre_GPCTienda As Ges_Pre_GPCTienda Readonly,
@Ges_Pre_PorcTemporada As Ges_Pre_PorcTemporada Readonly,
@Status    As Integer OutPut
AS
BEGIN

SET NOCOUNT ON;

Declare @Error VarChar(500)
Declare @Id Varchar(50)
Begin Try
Begin Transaction
If not Exists( Select 1
From Gestion.dbo.Ges_Pre_PresupuestoTiendaGpc gpc With(Nolock)
Inner Join  @Ges_Pre_GPCTienda pre
On gpc.Id_PreTieGpc = pre.Id_PreTieGpc)
Begin
--Insert GPC
print ('insert gpc')
Insert Into Ges_Pre_PresupuestoTiendaGpc
(
Id_PreTieGpc, Cod_Tienda, Cod_Gpc, Presupuesto, Utilizado, Stock, Usuario, Fecha_Creacion, Estacion
)
Select gpc.Id_PreTieGpc, gpc.Cod_Tienda, gpc.Cod_Gpc, gpc.Presupuesto,0, gpc.Stock, gpc.Usuario,getdate(), gpc.Estacion
From @Ges_Pre_GPCTienda gpc
Where gpc.nuevo = 'S'

If @@ERROR <> 0
Begin
Set @Status = 0
Rollback Tran
Return @Status
End

SET @Status = 1
SET @Error = 'OK'
SELECT @Error AS ERROR
End
Else
Begin
--- Actualiza GPC
print('Update GPC')
UPDATE Ges_Pre_PresupuestoTiendaGpc
SET stock = gpc.Stock, Presupuesto = gpc.Presupuesto,
Fecha_Creacion = GETDATE(), Usuario = gpc.Usuario, Estacion = gpc.Estacion
FROM Ges_Pre_PresupuestoTiendaGpc c
INNER JOIN @Ges_Pre_GPCTienda gpc
ON c.Id_PreTieGpc = gpc.Id_PreTieGpc
Where gpc.nuevo = 'N'

If @@ERROR <> 0
Begin
Set @Status = 0
Rollback Tran
Return @Status
End

SET @Status = 1
SET @Error = 'OK'
SELECT @Error AS ERROR

End

If Not Exists( Select tem.Id_PreTemp
From Gestion.dbo.Ges_Pre_PorcentajeTemporada tem With(Nolock)
Inner Join  @Ges_Pre_PorcTemporada pre
On tem.Id_PreTemp = pre.Id_PreTemp)
Begin
---Insert temporada
print ('Insert temporada')
Insert into Gestion.dbo.Ges_Pre_PorcentajeTemporada
(
Id_PreTemp, Cod_Tienda,Cod_PreTemporada, Cod_PreAnual, Cod_Temporada, Porcentaje, Usuario, Fecha_Creacion, Estacion
)

Select Id_PreTemp, Cod_tienda, Cod_Pretemporada, Cod_PreAnual, Cod_Temporada, Descuento,  Usuario, GETDATE(), Estacion
From @Ges_Pre_PorcTemporada
Where Nuevo = 'S'

If @@ERROR <> 0
Begin
Set @Status = 0
Rollback Tran
Return @Status
End
End
Else
Begin

--- actualiza temporada
Print('Update Temporada')
Update temp
Set Porcentaje = pre.Descuento
From Gestion.dbo.Ges_Pre_PorcentajeTemporada Temp
Inner join @Ges_Pre_PorcTemporada pre
On Temp.Id_PreTemp = pre.Id_PreTemp
Where pre.Nuevo = 'N'

If @@ERROR <> 0
Begin
Set @Status = 0
Rollback Tran
Return @Status
End

SET @Status = 1
SET @Error = 'OK'
SELECT @Error AS ERROR

End
If 0< (Select Count(1)
From [dbo].[Ges_Pre_PorcentajeTemporada] t
Where t.Cod_tienda = @Cod_Tienda
And Not Exists (Select 1
From @Ges_Pre_PorcTemporada tmp
Where tmp.Id_PreTemp = t.Id_PreTemp))
Begin
--- Borra temporada
print ('delete temporada')
Delete tt From Ges_Pre_PorcentajeTemporada tt
Where tt.Cod_tienda = @Cod_Tienda
And Not Exists (Select 1
From @Ges_Pre_PorcTemporada tmp
Where tmp.Id_PreTemp = tt.Id_PreTemp
And tmp.Nuevo = 'N')


If @@ERROR <> 0
Begin
Set @Status = 0
Rollback Tran
Return @Status
End

SET @Status = 1
SET @Error = 'OK'
SELECT @Error AS ERROR
End
Print ('Insert ID')
--Insert Validacion Usuario
Insert into Ges_pre_log (Cod_tienda)
Values
(
@Cod_Tienda
)

If @@ERROR <> 0
Begin
Set @Status = 0
Rollback Tran
Return @Status
End


Commit Transaction
SET @Status = 1
SET @Error = 'OK'
SELECT @Error AS ERROR
RETURN @Status
End Try
Begin Catch
If @@TRANCOUNT > 0
Begin
SELECT ERROR_MESSAGE() AS ErrorMessage;
Rollback Transaction
Set @Status = 0
Set @Error = 'try'
--Print  @@Error
Select @Error AS ERROR
Return @Status
END
Else
Begin
SELECT ERROR_MESSAGE() AS ErrorMessage;
Set @Status = 0
Set @Error = 'try'
--Print  @@Error
Select @Error AS ERROR
Return @Status
End
End Catch   
END

Saludos