je souhiate faire un trigger pour mettre a jour un stock mais la sous
sql server je galere un peu
--A l'insertion (-) et a la suppression (+) d'une ligne dans le BL je
met a jour le nombre de piece detachée
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER tg_MAJ_Stock_PD ON Ligne_BL AFTER INSERT,DELETE
AS
BEGIN
IF INSERT
BEGIN
UPDATE [Piece_Detachee]
SET [NbEnStock] = [NbEnStock] - :new.Qte
WHERE [Piece_Detachee].Id_PD = :new.Id_Article;
END
IF DELETE
BEGIN
UPDATE [Piece_Detachee]
SET [NbEnStock] = [NbEnStock] + :old.Qte
WHERE [Piece_Detachee].Id_PD = :old.Id_Article;
END
END
En plus je ne trouve pas le FOR EACH ROW, est ce que c'est activé par
défaut?
En ce qui concerne les erreurs il me dit qu'il connait pas IF INSERT,
:new.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Fred BROUARD
Bonjour,
votre trigger devrait se résuler à :
CREATE TRIGGER tg_MAJ_Stock_PD ON Ligne_BL AFTER INSERT,DELETE AS BEGIN IF EXISTS(SELECT * FROM inserted) UPDATE Piece_Detachee SET NbEnStock = LBL.NbEnStock - i.Qte FROM Ligne_BL AS LBL INNER JOIN inserted AS i ON LBL.Id_PD = i.Id_Article ELSE UPDATE Piece_Detachee SET NbEnStock = LBL.NbEnStock + d.Qte FROM Ligne_BL AS LBL INNER JOIN deleted AS d ON LBL.Id_PD = i.Id_Article END
REMARQUES : 1) dans SQL Server les pseudo tables new et old s'intitulent inserted et deleted 2) il n'y a pas de FOR EACH ROW car le trigger est toujours ensemblistes. Si vous voulez faire un code pour chaque ligne il faut implémenter un curseur.
Lisez l'article que j'ai écrit sur les triggers SQL Server : http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L5
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
chris81 a écrit :
bonjour
je souhiate faire un trigger pour mettre a jour un stock mais la sous sql server je galere un peu
--A l'insertion (-) et a la suppression (+) d'une ligne dans le BL je met a jour le nombre de piece detachée
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TRIGGER tg_MAJ_Stock_PD ON Ligne_BL AFTER INSERT,DELETE AS BEGIN IF INSERT BEGIN UPDATE [Piece_Detachee] SET [NbEnStock] = [NbEnStock] - :new.Qte WHERE [Piece_Detachee].Id_PD = :new.Id_Article; END
IF DELETE BEGIN UPDATE [Piece_Detachee] SET [NbEnStock] = [NbEnStock] + :old.Qte WHERE [Piece_Detachee].Id_PD = :old.Id_Article; END END
En plus je ne trouve pas le FOR EACH ROW, est ce que c'est activé par défaut?
En ce qui concerne les erreurs il me dit qu'il connait pas IF INSERT, :new.
Qqun saurait il le corriger merci
Bonjour,
votre trigger devrait se résuler à :
CREATE TRIGGER tg_MAJ_Stock_PD ON Ligne_BL AFTER INSERT,DELETE
AS
BEGIN
IF EXISTS(SELECT *
FROM inserted)
UPDATE Piece_Detachee
SET NbEnStock = LBL.NbEnStock - i.Qte
FROM Ligne_BL AS LBL
INNER JOIN inserted AS i
ON LBL.Id_PD = i.Id_Article
ELSE
UPDATE Piece_Detachee
SET NbEnStock = LBL.NbEnStock + d.Qte
FROM Ligne_BL AS LBL
INNER JOIN deleted AS d
ON LBL.Id_PD = i.Id_Article
END
REMARQUES :
1) dans SQL Server les pseudo tables new et old s'intitulent inserted et
deleted
2) il n'y a pas de FOR EACH ROW car le trigger est toujours ensemblistes.
Si vous voulez faire un code pour chaque ligne il faut implémenter un
curseur.
Lisez l'article que j'ai écrit sur les triggers SQL Server :
http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L5
A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
chris81 a écrit :
bonjour
je souhiate faire un trigger pour mettre a jour un stock mais la sous
sql server je galere un peu
--A l'insertion (-) et a la suppression (+) d'une ligne dans le BL je
met a jour le nombre de piece detachée
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER tg_MAJ_Stock_PD ON Ligne_BL AFTER INSERT,DELETE
AS
BEGIN
IF INSERT
BEGIN
UPDATE [Piece_Detachee]
SET [NbEnStock] = [NbEnStock] - :new.Qte
WHERE [Piece_Detachee].Id_PD = :new.Id_Article;
END
IF DELETE
BEGIN
UPDATE [Piece_Detachee]
SET [NbEnStock] = [NbEnStock] + :old.Qte
WHERE [Piece_Detachee].Id_PD = :old.Id_Article;
END
END
En plus je ne trouve pas le FOR EACH ROW, est ce que c'est activé par
défaut?
En ce qui concerne les erreurs il me dit qu'il connait pas IF INSERT, :new.
CREATE TRIGGER tg_MAJ_Stock_PD ON Ligne_BL AFTER INSERT,DELETE AS BEGIN IF EXISTS(SELECT * FROM inserted) UPDATE Piece_Detachee SET NbEnStock = LBL.NbEnStock - i.Qte FROM Ligne_BL AS LBL INNER JOIN inserted AS i ON LBL.Id_PD = i.Id_Article ELSE UPDATE Piece_Detachee SET NbEnStock = LBL.NbEnStock + d.Qte FROM Ligne_BL AS LBL INNER JOIN deleted AS d ON LBL.Id_PD = i.Id_Article END
REMARQUES : 1) dans SQL Server les pseudo tables new et old s'intitulent inserted et deleted 2) il n'y a pas de FOR EACH ROW car le trigger est toujours ensemblistes. Si vous voulez faire un code pour chaque ligne il faut implémenter un curseur.
Lisez l'article que j'ai écrit sur les triggers SQL Server : http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L5
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
chris81 a écrit :
bonjour
je souhiate faire un trigger pour mettre a jour un stock mais la sous sql server je galere un peu
--A l'insertion (-) et a la suppression (+) d'une ligne dans le BL je met a jour le nombre de piece detachée
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TRIGGER tg_MAJ_Stock_PD ON Ligne_BL AFTER INSERT,DELETE AS BEGIN IF INSERT BEGIN UPDATE [Piece_Detachee] SET [NbEnStock] = [NbEnStock] - :new.Qte WHERE [Piece_Detachee].Id_PD = :new.Id_Article; END
IF DELETE BEGIN UPDATE [Piece_Detachee] SET [NbEnStock] = [NbEnStock] + :old.Qte WHERE [Piece_Detachee].Id_PD = :old.Id_Article; END END
En plus je ne trouve pas le FOR EACH ROW, est ce que c'est activé par défaut?
En ce qui concerne les erreurs il me dit qu'il connait pas IF INSERT, :new.
Qqun saurait il le corriger merci
JO
Fred BROUARD a présenté l'énoncé suivant :
Bonjour,
votre trigger devrait se résuler à :
CREATE TRIGGER tg_MAJ_Stock_PD ON Ligne_BL AFTER INSERT,DELETE AS BEGIN IF EXISTS(SELECT * FROM inserted) UPDATE Piece_Detachee SET NbEnStock = LBL.NbEnStock - i.Qte FROM Ligne_BL AS LBL INNER JOIN inserted AS i ON LBL.Id_PD = i.Id_Article ELSE UPDATE Piece_Detachee SET NbEnStock = LBL.NbEnStock + d.Qte FROM Ligne_BL AS LBL INNER JOIN deleted AS d ON LBL.Id_PD = i.Id_Article END
REMARQUES : 1) dans SQL Server les pseudo tables new et old s'intitulent inserted et deleted 2) il n'y a pas de FOR EACH ROW car le trigger est toujours ensemblistes. Si vous voulez faire un code pour chaque ligne il faut implémenter un curseur.
Lisez l'article que j'ai écrit sur les triggers SQL Server : http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L5
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
chris81 a écrit :
bonjour
je souhiate faire un trigger pour mettre a jour un stock mais la sous sql server je galere un peu
--A l'insertion (-) et a la suppression (+) d'une ligne dans le BL je met a jour le nombre de piece detachée
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TRIGGER tg_MAJ_Stock_PD ON Ligne_BL AFTER INSERT,DELETE AS BEGIN IF INSERT BEGIN UPDATE [Piece_Detachee] SET [NbEnStock] = [NbEnStock] - :new.Qte WHERE [Piece_Detachee].Id_PD = :new.Id_Article; END
IF DELETE BEGIN UPDATE [Piece_Detachee] SET [NbEnStock] = [NbEnStock] + :old.Qte WHERE [Piece_Detachee].Id_PD = :old.Id_Article; END END
En plus je ne trouve pas le FOR EACH ROW, est ce que c'est activé par défaut?
En ce qui concerne les erreurs il me dit qu'il connait pas IF INSERT, :new.
Qqun saurait il le corriger merci
merci , ben c pluis simple sur oracle pf!!!!
Fred BROUARD a présenté l'énoncé suivant :
Bonjour,
votre trigger devrait se résuler à :
CREATE TRIGGER tg_MAJ_Stock_PD ON Ligne_BL AFTER INSERT,DELETE
AS
BEGIN
IF EXISTS(SELECT *
FROM inserted)
UPDATE Piece_Detachee
SET NbEnStock = LBL.NbEnStock - i.Qte
FROM Ligne_BL AS LBL
INNER JOIN inserted AS i
ON LBL.Id_PD = i.Id_Article
ELSE
UPDATE Piece_Detachee
SET NbEnStock = LBL.NbEnStock + d.Qte
FROM Ligne_BL AS LBL
INNER JOIN deleted AS d
ON LBL.Id_PD = i.Id_Article
END
REMARQUES :
1) dans SQL Server les pseudo tables new et old s'intitulent inserted et
deleted
2) il n'y a pas de FOR EACH ROW car le trigger est toujours ensemblistes.
Si vous voulez faire un code pour chaque ligne il faut implémenter un
curseur.
Lisez l'article que j'ai écrit sur les triggers SQL Server :
http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L5
A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
chris81 a écrit :
bonjour
je souhiate faire un trigger pour mettre a jour un stock mais la sous sql
server je galere un peu
--A l'insertion (-) et a la suppression (+) d'une ligne dans le BL je met a
jour le nombre de piece detachée
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER tg_MAJ_Stock_PD ON Ligne_BL AFTER INSERT,DELETE
AS
BEGIN
IF INSERT
BEGIN
UPDATE [Piece_Detachee]
SET [NbEnStock] = [NbEnStock] - :new.Qte
WHERE [Piece_Detachee].Id_PD = :new.Id_Article;
END
IF DELETE
BEGIN
UPDATE [Piece_Detachee]
SET [NbEnStock] = [NbEnStock] + :old.Qte
WHERE [Piece_Detachee].Id_PD = :old.Id_Article;
END
END
En plus je ne trouve pas le FOR EACH ROW, est ce que c'est activé par
défaut?
En ce qui concerne les erreurs il me dit qu'il connait pas IF INSERT, :new.
CREATE TRIGGER tg_MAJ_Stock_PD ON Ligne_BL AFTER INSERT,DELETE AS BEGIN IF EXISTS(SELECT * FROM inserted) UPDATE Piece_Detachee SET NbEnStock = LBL.NbEnStock - i.Qte FROM Ligne_BL AS LBL INNER JOIN inserted AS i ON LBL.Id_PD = i.Id_Article ELSE UPDATE Piece_Detachee SET NbEnStock = LBL.NbEnStock + d.Qte FROM Ligne_BL AS LBL INNER JOIN deleted AS d ON LBL.Id_PD = i.Id_Article END
REMARQUES : 1) dans SQL Server les pseudo tables new et old s'intitulent inserted et deleted 2) il n'y a pas de FOR EACH ROW car le trigger est toujours ensemblistes. Si vous voulez faire un code pour chaque ligne il faut implémenter un curseur.
Lisez l'article que j'ai écrit sur les triggers SQL Server : http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L5
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
chris81 a écrit :
bonjour
je souhiate faire un trigger pour mettre a jour un stock mais la sous sql server je galere un peu
--A l'insertion (-) et a la suppression (+) d'une ligne dans le BL je met a jour le nombre de piece detachée
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TRIGGER tg_MAJ_Stock_PD ON Ligne_BL AFTER INSERT,DELETE AS BEGIN IF INSERT BEGIN UPDATE [Piece_Detachee] SET [NbEnStock] = [NbEnStock] - :new.Qte WHERE [Piece_Detachee].Id_PD = :new.Id_Article; END
IF DELETE BEGIN UPDATE [Piece_Detachee] SET [NbEnStock] = [NbEnStock] + :old.Qte WHERE [Piece_Detachee].Id_PD = :old.Id_Article; END END
En plus je ne trouve pas le FOR EACH ROW, est ce que c'est activé par défaut?
En ce qui concerne les erreurs il me dit qu'il connait pas IF INSERT, :new.
Qqun saurait il le corriger merci
merci , ben c pluis simple sur oracle pf!!!!
Fred BROUARD
JO a écrit :
Fred BROUARD a présenté l'énoncé suivant :
Bonjour,
votre trigger devrait se résuler à :
CREATE TRIGGER tg_MAJ_Stock_PD ON Ligne_BL AFTER INSERT,DELETE AS BEGIN IF EXISTS(SELECT * FROM inserted) UPDATE Piece_Detachee SET NbEnStock = LBL.NbEnStock - i.Qte FROM Ligne_BL AS LBL INNER JOIN inserted AS i ON LBL.Id_PD = i.Id_Article ELSE UPDATE Piece_Detachee SET NbEnStock = LBL.NbEnStock + d.Qte FROM Ligne_BL AS LBL INNER JOIN deleted AS d ON LBL.Id_PD = i.Id_Article END
REMARQUES : 1) dans SQL Server les pseudo tables new et old s'intitulent inserted et deleted 2) il n'y a pas de FOR EACH ROW car le trigger est toujours ensemblistes. Si vous voulez faire un code pour chaque ligne il faut implémenter un curseur.
Lisez l'article que j'ai écrit sur les triggers SQL Server : http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L5
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
chris81 a écrit :
bonjour
je souhiate faire un trigger pour mettre a jour un stock mais la sous sql server je galere un peu
--A l'insertion (-) et a la suppression (+) d'une ligne dans le BL je met a jour le nombre de piece detachée
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TRIGGER tg_MAJ_Stock_PD ON Ligne_BL AFTER INSERT,DELETE AS BEGIN IF INSERT BEGIN UPDATE [Piece_Detachee] SET [NbEnStock] = [NbEnStock] - :new.Qte WHERE [Piece_Detachee].Id_PD = :new.Id_Article; END
IF DELETE BEGIN UPDATE [Piece_Detachee] SET [NbEnStock] = [NbEnStock] + :old.Qte WHERE [Piece_Detachee].Id_PD = :old.Id_Article; END END
En plus je ne trouve pas le FOR EACH ROW, est ce que c'est activé par défaut?
En ce qui concerne les erreurs il me dit qu'il connait pas IF INSERT, :new.
Qqun saurait il le corriger merci
merci , ben c pluis simple sur oracle pf!!!!
non, pas plus ni moins... différent !
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
JO a écrit :
Fred BROUARD a présenté l'énoncé suivant :
Bonjour,
votre trigger devrait se résuler à :
CREATE TRIGGER tg_MAJ_Stock_PD ON Ligne_BL AFTER INSERT,DELETE
AS
BEGIN
IF EXISTS(SELECT *
FROM inserted)
UPDATE Piece_Detachee
SET NbEnStock = LBL.NbEnStock - i.Qte
FROM Ligne_BL AS LBL
INNER JOIN inserted AS i
ON LBL.Id_PD = i.Id_Article
ELSE
UPDATE Piece_Detachee
SET NbEnStock = LBL.NbEnStock + d.Qte
FROM Ligne_BL AS LBL
INNER JOIN deleted AS d
ON LBL.Id_PD = i.Id_Article
END
REMARQUES :
1) dans SQL Server les pseudo tables new et old s'intitulent inserted
et deleted
2) il n'y a pas de FOR EACH ROW car le trigger est toujours ensemblistes.
Si vous voulez faire un code pour chaque ligne il faut implémenter un
curseur.
Lisez l'article que j'ai écrit sur les triggers SQL Server :
http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L5
A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
chris81 a écrit :
bonjour
je souhiate faire un trigger pour mettre a jour un stock mais la sous
sql server je galere un peu
--A l'insertion (-) et a la suppression (+) d'une ligne dans le BL je
met a jour le nombre de piece detachée
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER tg_MAJ_Stock_PD ON Ligne_BL AFTER INSERT,DELETE
AS
BEGIN
IF INSERT
BEGIN
UPDATE [Piece_Detachee]
SET [NbEnStock] = [NbEnStock] - :new.Qte
WHERE [Piece_Detachee].Id_PD = :new.Id_Article;
END
IF DELETE
BEGIN
UPDATE [Piece_Detachee]
SET [NbEnStock] = [NbEnStock] + :old.Qte
WHERE [Piece_Detachee].Id_PD = :old.Id_Article;
END
END
En plus je ne trouve pas le FOR EACH ROW, est ce que c'est activé par
défaut?
En ce qui concerne les erreurs il me dit qu'il connait pas IF INSERT,
:new.
Qqun saurait il le corriger merci
merci , ben c pluis simple sur oracle pf!!!!
non, pas plus ni moins... différent !
A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
CREATE TRIGGER tg_MAJ_Stock_PD ON Ligne_BL AFTER INSERT,DELETE AS BEGIN IF EXISTS(SELECT * FROM inserted) UPDATE Piece_Detachee SET NbEnStock = LBL.NbEnStock - i.Qte FROM Ligne_BL AS LBL INNER JOIN inserted AS i ON LBL.Id_PD = i.Id_Article ELSE UPDATE Piece_Detachee SET NbEnStock = LBL.NbEnStock + d.Qte FROM Ligne_BL AS LBL INNER JOIN deleted AS d ON LBL.Id_PD = i.Id_Article END
REMARQUES : 1) dans SQL Server les pseudo tables new et old s'intitulent inserted et deleted 2) il n'y a pas de FOR EACH ROW car le trigger est toujours ensemblistes. Si vous voulez faire un code pour chaque ligne il faut implémenter un curseur.
Lisez l'article que j'ai écrit sur les triggers SQL Server : http://sqlpro.developpez.com/cours/sqlserver/transactsql/#L5
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
chris81 a écrit :
bonjour
je souhiate faire un trigger pour mettre a jour un stock mais la sous sql server je galere un peu
--A l'insertion (-) et a la suppression (+) d'une ligne dans le BL je met a jour le nombre de piece detachée
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TRIGGER tg_MAJ_Stock_PD ON Ligne_BL AFTER INSERT,DELETE AS BEGIN IF INSERT BEGIN UPDATE [Piece_Detachee] SET [NbEnStock] = [NbEnStock] - :new.Qte WHERE [Piece_Detachee].Id_PD = :new.Id_Article; END
IF DELETE BEGIN UPDATE [Piece_Detachee] SET [NbEnStock] = [NbEnStock] + :old.Qte WHERE [Piece_Detachee].Id_PD = :old.Id_Article; END END
En plus je ne trouve pas le FOR EACH ROW, est ce que c'est activé par défaut?
En ce qui concerne les erreurs il me dit qu'il connait pas IF INSERT, :new.
Qqun saurait il le corriger merci
merci , ben c pluis simple sur oracle pf!!!!
non, pas plus ni moins... différent !
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************