IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Problème lors d'un trigger sur update


Sujet :

Développement SQL Server

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 40
    Points : 36
    Points
    36
    Par défaut Problème lors d'un trigger sur update
    Bonjour,

    J'ai un trigger sur insert, sur update. lors de l'insert cela fonctionne bien mais lors de l'update cela ne fonctionne pas!

    voici le message d'erreur

    No row was updated
    The data in row 15 was not committed
    Error Source: Microsoft.VisualStudio.DataTools
    Error Message: The row value(s) updated or deleted either do not make the row unique or they alter multiple rows(2 rows)

    dans mon trigger j'update la table qui a lancé le trigger, je suppose que le problème vient de la,c'est pourquoi j'ai mis une condition en début de trigger pou voir quel champs est modifié et n'agir que lorsque c'est le chamsp Date

    Avez-vous une idée de comment je peux résoudre cela ?

    Merci d'avance

    Yoni

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    ALTER TRIGGER tr_Source_UPDATE
    ON Ads
    AFTER UPDATE
    AS
      DECLARE @startingYearsOfService datetime
      DECLARE @Id int	
      DECLARE @year int
      DECLARE @days int
      DECLARE @statut char
      DECLARE @oldStatut char
    	IF NOT UPDATE(Date)
    	RETURN
      SET @startingYearsOfService = (SELECT Date FROM inserted )
      SET @Id = (SELECT IdAds FROM inserted )
      SET @oldStatut = (SELECT Contact FROM inserted )
      SET @year = abs(round((datediff(d,CURRENT_TIMESTAMP,@startingYearsOfService))/365,0,1))
      SET @days = abs(datediff(d,CURRENT_TIMESTAMP,@startingYearsOfService))
      IF @days<365
    	BEGIN
    		set @statut='A'
    	END
      IF @year <10
    	Begin
    		set @statut='B'
    	END
      IF @year >10
    	Begin
    		set @statut='C'
     
    	END
     
      IF @statut <> @oldStatut
    	begin
    	UPDATE Ads SET [Contact]=@statut FROM Ads A INNER JOIN inserted I ON A.IdAds=I.IdAds 
    	end

  2. #2
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Bonjour,

    Je crois qu'un des grands mystères de ma vie, une question que je me pose presque tous les jours, et à laquelle je n'ai pas encore d'embryon de réponse, est : pourquoi cette erreur est-elle commise aussi souvent ???

    Bon, tu te fous sans doute de mes états d'âme. En attendant :
    Le trigger est ENSEMBLISTE, il opère sur des pseudo tables qui contiennent potentiellement plusieurs lignes. Donc ton test du début n'est pas bon.
    Bien, peut-être en es-tu conscient, et tu fais ce test pour voir d'où vient ton problème.

    Ton problème ici vient de ton outil client (Visual Studio on dirait). Il n'aime pas transmettre un UPDATE lorsqu'il ne sait pas unifier les lignes. SQL Server s'en moque, il met tout à jour, mais comme tu dois utiliser un genre de Data Grid, elle ne sait pas reconnaître la ligne sur laquelle tu travailles, très certainement parce que tu n'as pas mis de contrainte de clé primaire sur ta table.

    Donc, solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE Ads ADD CONSTRAINT pk$ads PRIMARY KEY (tacolonne)

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/05/2009, 20h16
  2. Réponses: 1
    Dernier message: 16/07/2007, 20h03
  3. [AJAX] Mise sur serveur
    Par mms_1983 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/07/2007, 21h15
  4. Trigger sur Update et Insert
    Par Jérôme Lambert dans le forum Développement
    Réponses: 2
    Dernier message: 11/12/2006, 13h52
  5. Réponses: 4
    Dernier message: 25/09/2006, 10h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo