Trigger sur INSERT dans F_DOCLIGNE
Modérateurs: Super-Apogea, Super Modérateur
2 messages
|Page 1 sur 1
Trigger sur INSERT dans F_DOCLIGNE
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
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.
Re: Trigger sur INSERT dans F_DOCLIGNE
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
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
2 messages
|Page 1 sur 1
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité