[SQL 2008 - Win7 - Gescom v8.01] Problème sur un trigger
Modérateurs: Super-Apogea, Super Modérateur
2 messages
|Page 1 sur 1
[SQL 2008 - Win7 - Gescom v8.01] Problème sur un trigger
Bonjour à tous !
Etant très vite limité dès qu'une requête SQL devient un peu complexe, je viens faire appel à vous et vos lumières...
Je suis en train d'essayer de préparer un trigger qui me permettra de récupérer dans 2 infos libres sur les lignes de documents d'achats, le compte général et la section analytique de l'article en fonction de la catégorie comptable du fournisseur.
Voilà ce que j'ai commencé à écrire mais j'ai un souci (peut-être pas grand chose) au niveau des parenthèses et je n'arrive pas à aller plus loin... :
J'ai le problème sur les deux parenthèses se trouvant sur les lignes avec les points-virgules.
Si, en plus, vous pourriez me dire si ce que je fais parait cohérent, ce serait encore plus mieux top !!!
Merci d'avance
Funkydiem
Etant très vite limité dès qu'une requête SQL devient un peu complexe, je viens faire appel à vous et vos lumières...
Je suis en train d'essayer de préparer un trigger qui me permettra de récupérer dans 2 infos libres sur les lignes de documents d'achats, le compte général et la section analytique de l'article en fonction de la catégorie comptable du fournisseur.
Voilà ce que j'ai commencé à écrire mais j'ai un souci (peut-être pas grand chose) au niveau des parenthèses et je n'arrive pas à aller plus loin... :
- Code: Tout sélectionner
CREATE TRIGGER RECUP_SECTION
ON F_DOCLIGNE
AFTER INSERT,UPDATE
AS
DECLARE @article varchar(19),
@cat_cpta smallint,
@section varchar(13),
@compte_gen varchar(13)
SET @article= (SELECT AR_Ref FROM inserted);
SET @cat_cpta= (SELECT F_DOCENTETE.N_CatCompta FROM F_DOCENTETE INNER JOIN F_DOCLIGNE ON F_DOCENTETE.DO_Piece=F_DOCLIGNE.DO_Piece);
SET @section= (CASE WHEN EXISTS (SELECT ACP_ComptaCPT_CompteA
FROM F_ARTCOMPTA
WHERE AR_Ref=@article
AND ACP_Champ=@cat_cpta
AND ACP_Type=1)
THEN (SELECT ACP_ComptaCPT_CompteA
FROM F_ARTCOMPTA
WHERE AR_Ref=@article
AND ACP_Champ=@cat_cpta
AND ACP_Type=1)
ELSE (SELECT FCP_ComptaCPT_CompteA
FROM F_FAMCOMPTA
WHERE FA_CodeFamille=(SELECT FA_CodeFamille
FROM F_ARTICLE
WHERE @article=AR_Ref)
AND FCP_Champ=@cat_cpta
AND FCP_Type=1)
);
SET @compte_gen= (CASE WHEN EXISTS (SELECT ACP_ComptaCPT_CompteG
FROM F_ARTCOMPTA
WHERE AR_Ref=@article
AND ACP_Champ=@cat_cpta AND ACP_Type=1)
THEN (SELECT ACP_ComptaCPT_CompteG
FROM F_ARTCOMPTA
WHERE AR_Ref=@article
AND ACP_Champ=@cat_cpta
AND ACP_Type=1)
ELSE (SELECT FCP_ComptaCPT_CompteG
FROM F_FAMCOMPTA
WHERE FA_CodeFamille=(SELECT FA_CodeFamille
FROM F_ARTICLE
WHERE @article=AR_Ref)
AND FCP_Champ=@cat_cpta
AND FCP_Type=1)
);
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
INSERT INTO F_DOCLIGNE (Section, CompteG)
SELECT @section, @compte_gen
END
GO
J'ai le problème sur les deux parenthèses se trouvant sur les lignes avec les points-virgules.
Si, en plus, vous pourriez me dire si ce que je fais parait cohérent, ce serait encore plus mieux top !!!
Merci d'avance
Funkydiem
Dernière édition par Funkydiem le Lun 16 Nov 2015 18:05, édité 1 fois.
- Contributeur
- Messages: 80
- Inscription: Lun 8 Nov 2010 16:27
Re: [SQL 2008 - Win7 - Gescom v8.01] Problème sur un trigger
Bon, je me suis débrouillé en faisant certainement pas les choses dans les règles mais si ça peut aider, la voici :
- Code: Tout sélectionner
ALTER TRIGGER [dbo].[RECUP_SECTION]
ON [dbo].[F_DOCLIGNE]
AFTER INSERT,UPDATE
AS
DECLARE @article varchar(19),
@cbMarq int,
@sectionA varchar(13),
@compte_genA varchar(13),
@sectionF varchar(13),
@compte_genF varchar(13);
SET @article= (SELECT AR_Ref FROM inserted);
SET @cbMarq= (SELECT cbMarq FROM inserted);
SET @sectionA= (SELECT ACP_ComptaCPT_CompteA FROM F_ARTCOMPTA INNER JOIN inserted ON F_ARTCOMPTA.AR_Ref=INSERTED.AR_Ref AND F_ARTCOMPTA.ACP_Champ=(SELECT N_CatCompta FROM F_DOCENTETE INNER JOIN inserted ON F_DOCENTETE.DO_Piece=inserted.DO_Piece) AND ACP_Type=1);
SET @compte_genA= (SELECT ACP_ComptaCPT_CompteG FROM F_ARTCOMPTA INNER JOIN inserted ON F_ARTCOMPTA.AR_Ref=INSERTED.AR_Ref AND F_ARTCOMPTA.ACP_Champ=(SELECT N_CatCompta FROM F_DOCENTETE INNER JOIN inserted ON F_DOCENTETE.DO_Piece=inserted.DO_Piece) AND ACP_Type=1);
SET @sectionF= (SELECT FCP_ComptaCPT_CompteA FROM F_FAMCOMPTA WHERE FA_CodeFamille=(SELECT FA_CodeFamille FROM F_ARTICLE INNER JOIN inserted ON inserted.AR_Ref=F_ARTICLE.AR_Ref)AND FCP_Champ=(SELECT N_CatCompta FROM F_DOCENTETE INNER JOIN inserted ON F_DOCENTETE.DO_Piece=inserted.DO_Piece) AND FCP_Type=1);
SET @compte_genF= (SELECT FCP_ComptaCPT_CompteG FROM F_FAMCOMPTA WHERE FA_CodeFamille=(SELECT FA_CodeFamille FROM F_ARTICLE INNER JOIN inserted ON inserted.AR_Ref=F_ARTICLE.AR_Ref) AND FCP_Champ=(SELECT N_CatCompta FROM F_DOCENTETE INNER JOIN inserted ON F_DOCENTETE.DO_Piece=inserted.DO_Piece) AND FCP_Type=1);
IF (SELECT TRIGGER_NESTLEVEL()) < 2
BEGIN
SET NOCOUNT ON;
IF EXISTS (SELECT AR_Ref FROM F_ARTCOMPTA WHERE AR_Ref=(SELECT AR_Ref FROM inserted) AND ACP_Champ=(SELECT N_CatCompta FROM F_DOCENTETE INNER JOIN inserted ON F_DOCENTETE.DO_Piece=inserted.DO_Piece) AND ACP_Type=1)
UPDATE F_DOCLIGNE
SET Section=@sectionA, CompteG=@compte_genA WHERE cbMarq=@cbMarq AND DO_Domaine=1
ELSE
UPDATE F_DOCLIGNE
SET Section=@sectionF, CompteG=@compte_genF WHERE cbMarq=@cbMarq AND DO_Domaine=1
END
- Contributeur
- Messages: 80
- Inscription: Lun 8 Nov 2010 16:27
2 messages
|Page 1 sur 1
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité