Trigger sur INSERT dans F_DOCLIGNE

Cette section est consacrée aux développements d'applications interfacées avec les logiciels Sage.

Modérateurs: Super-Apogea, Super Modérateur

Trigger sur INSERT dans F_DOCLIGNE

de gremlins13 » Jeu 19 Fév 2015 15:30

Bonjour,

Quelqu'un peut-il m'expliquer pourquoi le trigger suivant ne fonctionne pas :
Le but de ce trigger est de mettre dans un champ d'information libre AS_LI_periode_fin de F_DOCLIGNE, la valeur du champ DO_FinPeriod de F_DOCENTETE :

Il n'y a pas d'erreur, mais la mise à jour ne se fait pas :

Pour Info Sql Server 2008 sur serveur 2008 R2 Entreprise


USE [BASE]
GO
/****** Object: Trigger [dbo].[UpdateFinPeriode] Script Date: 02/18/2015 17:43:11 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER [dbo].[UpdateFinPeriode]
ON [dbo].[F_DOCLIGNE]
after INSERT, update
AS
BEGIN
declare @dl_no as integer
declare @dopiece as varchar(20)
declare @dldatefinperiode as varchar(20)
declare @asliperiode as date

select
@dl_no = DL_No,
@dopiece = DO_Piece,
@asliperiode=AS_LI_periode_fin
from inserted

select @dldatefinperiode = DO_FinPeriod from F_DOCENTETE where DO_Piece=@dopiece

begin try
if (isnull(cast(@asliperiode as varchar),'X') = 'X' ) begin -- Pour éviter de boucler, update uniquement si champ AS_LI_periode_fin est nul
update F_DOCLIGNE set AS_LI_periode_fin = @dldatefinperiode where DL_No=@dl_no
end
end try
begin catch
EXEC dbo.CB_SendMessage @@SPID, ERROR_MESSAGE
end catch;
end[


Urgent Merci à tous
Dernière édition par gremlins13 le Jeu 19 Fév 2015 17:49, édité 1 fois.
Avatar de l’utilisateur
Posteur néophyte
Posteur néophyte
 
Messages: 13
Inscription: Mar 26 Fév 2013 12:06

Re: Trigger sur INSERT dans F_DOCLIGNE

de gremlins13 » Jeu 19 Fév 2015 17:48

Pour Info : Résolu :

Il suffisait de déclarer les variables en type smalldatetime et pas Date...

Et cela fonctionne tout de suite

Merci quand même, malgré le nombre de réponse = 0 :)

Voici un code qui fonctionne :

USE [BASE]
GO
/****** Object: Trigger [dbo].[UpdateFinPeriode] Script Date: 02/19/2015 16:44:08 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER [dbo].[UpdateFinPeriode]
ON [dbo].[F_DOCLIGNE]
after INSERT, update
AS
BEGIN
declare @dl_no as integer
declare @dopiece as varchar(20)
declare @dldatefinperiode as smalldatetime
declare @asliperiode as smalldatetime

select
@dl_no = DL_No,
@dopiece = DO_Piece,
@asliperiode=AS_LI_periode_fin
from inserted

select @dldatefinperiode = DO_FinPeriod from F_DOCENTETE where DO_Piece=@dopiece
begin try
if @asliperiode <> @dldatefinperiode begin
update F_DOCLIGNE set AS_LI_periode_fin = @dldatefinperiode where DL_No=@dl_no
end
end try
begin catch
EXEC dbo.CB_SendMessage @@SPID, ERROR_MESSAGE
end catch;
end
Avatar de l’utilisateur
Posteur néophyte
Posteur néophyte
 
Messages: 13
Inscription: Mar 26 Fév 2013 12:06


Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité