J'ai un problème avec la programmation d'un déclencheur de mise à jour. Je souhaite créer un déclencheur qui copie la ligne que j'ai modifiée dans une nouvelle ligne avec les nouvelles données et un nouvel ID. L'ancienne ligne doit être la même chose avec un simple changement de drapeau de 0 à 1.Le déclencheur de mise à jour SQL ne fonctionne pas comme prévu
Le look de table comme ceci:
ID Artikelname PREIS UPDATE_DATE FLAG
1 Tomatoe 3 14.06.2012 16:00 0
2 Apple 1,5 12.05.2012 14:45 0
Quand je change le prix de la première ligne, la table devrait ressembler à ceci :
ID Artikelname PREIS UPDATE_DATE FLAG
1 Tomatoe 3 14.06.2012 16:00 1
2 Apple 1,5 12.05.2012 14:45 0
1 Tomatoe 2 13.07.2012 10:45 0
Voici mon déclencheur jusqu'à présent:
USE [TestDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[Produkt_Update]
ON [dbo].[Produkt]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON
DECLARE @ID int
DECLARE @Artikelname nvarchar(50)
DECLARE @Preis numeric
DECLARE @Flag numeric
DECLARE @max_id int
SET @ID = (SELECT ID FROM inserted)
SET @Artikelname = (SELECT Artikelname FROM inserted)
SET @Preis = (SELECT Preis FROM inserted)
SET @Flag = (SELECT Flag FROM inserted)
SET @max_id = (SELECT MAX(ID) from dbo.Produkt)
SET IDENTITY_INSERT dbo.Produkt ON
INSERT INTO dbo.Produkt
(ID,Artikelname,Preis)
values (@max_id+1,@Artikelname,@Preis)
SET IDENTITY_INSERT dbo.Produkt OFF
UPDATE dbo.Produkt
SET Flag = 1
WHERE [email protected]
END
Avec mon déclencheur je peux créer la nouvelle ligne mais le prix sur le seuil de la première rangée change. Je ne sais pas comment gérer ça. Pourrais-tu m'aider s'il te plait?
Pourrait-il être e s'agit-il d'un déclencheur après mise à jour qui se déclenchera après la mise à jour de l'enregistrement? Un trigger avant la mise à jour n'existe pas, mais vous pouvez essayer avec un trigger au lieu de trigger je crois. Avec ceci votre instruction sql est 'remplacée' par le contenu du déclencheur – Rob
Un problème principal: vous semblez vous attendre à ce que 'Inserted' contienne toujours une seule ligne. Ce n'est pas le cas! Si votre instruction 'UPDATE' met à jour 10 lignes, alors' Inserted' contiendra 10 lignes et vos instructions comme 'SET @ID = (SELECT ID FROM inséré)' échoueront lamentablement ..... –