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

MS SQL Server Discussion :

Un seul enregistrement ayant true.


Sujet :

MS SQL Server

  1. #1
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 500
    Points : 6 083
    Points
    6 083
    Par défaut Un seul enregistrement ayant true.
    Bonjour.
    Voila c'est encore moi avec mes problèmes de trigger . J'ai une table langue et il y a un champs defaut pour définir la langue par défaut. Vous me voyez déjà venir .
    En effet, il peut pas y avoir plusieurs langues par défaut donc dans la table il faut que je contrôle le faite qu'il puisse y avoir qu'un enregistrement ayant la valeur true dans le champs defaut. Je veux bloquer le risque de mettre l'application web en périle au niveau de la source de l'information à cause d'une sourie pleine de clique dans la table en question.

    J'ai commencé par ça mais il y a un os dans le tyaux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE trigger OneDefaut 
      ON types
      AFTER INSERT,UPDATE 
       AS
           BEGIN
              UPDATE types  SET defaut = 0  FROM   types T,    inserted i  WHERE i.defaut<>T.defaut
           END
    IF @@Error <> 0
    ROLLBACK TRANSACTION
    Merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 114
    Points : 102
    Points
    102
    Par défaut
    a mon avis

    UPDATE types SET defaut = 0 FROM types T, inserted i WHERE i.defaut<>T.defaut

    le UPDATE table FROM c est pas bon

    Plutot UPDATE table SET champ = value WHERE

  3. #3
    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,

    Qqch comme ceci ne fait pas l'affaire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE trigger OneDefaut  
    ON types
    AFTER INSERT,UPDATE 
    AS
           	IF (SELECT COUNT(*) FROM dbo.Types WHERE Default = 1) > 1
    	BEGIN
    		RAISERROR('vous ne pouvez avoir qu''une valeur pas défaut', 16, 10)
    		ROLLBACK TRANSACTION
    	END

  4. #4
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 500
    Points : 6 083
    Points
    6 083
    Par défaut
    Citation Envoyé par rudib
    Bonjour,

    Qqch comme ceci ne fait pas l'affaire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE trigger OneDefaut  
    ON types
    AFTER INSERT,UPDATE 
    AS
           	IF (SELECT COUNT(*) FROM dbo.Types WHERE Default = 1) > 1
    	BEGIN
    		RAISERROR('vous ne pouvez avoir qu''une valeur pas défaut', 16, 10)
    		ROLLBACK TRANSACTION
    	END
    Cette solution n'est pas bête Juste une petite chose. ça fonctionne mais il me retourne beaucoup d'informations. Serait il possible de ne placer seulement "vous ne pouvez avoir qu''une valeur pas défaut" et non pas
    "Un autre utilisateur a modifié le contenu de cette table ou de cette vue. La ligne de données que vous modifiez n'existe plus dans la base de données.
    Erreur de base de données : [Microsoft ODBC blablalba....] vous ne pouvez avoir qu''une valeur pas défaut"

    "

  5. #5
    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
    La permière partie du message vient de ton client (les outils SQL je suppose), qui maintient un curseur ouvert (peut-être en type de concurrence optimiste) et détecte que le resultset a changé (il y a un rollback). Je ne vois pas bien comment changer ce comportement sans changer la façon dont l'appli client réagit. Quelqu'un aura peut-être une idée.

  6. #6
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 500
    Points : 6 083
    Points
    6 083
    Par défaut
    Citation Envoyé par rudib
    La permière partie du message vient de ton client (les outils SQL je suppose), qui maintient un curseur ouvert (peut-être en type de concurrence optimiste) et détecte que le resultset a changé (il y a un rollback). Je ne vois pas bien comment changer ce comportement sans changer la façon dont l'appli client réagit. Quelqu'un aura peut-être une idée.
    Je vais tester en executant la requete depuis un autre API. Mais dans un sens c'est pas grave tant que ça le bloque.
    Merci

    Edit : Depuis l'analyseur de requête il y a seulement message suivant "vous ne pouvez avoir qu'une valeur pas défaut". Ceci me convient parfaitement ! Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/09/2007, 11h56
  2. Sous-formulaire avec 1 seul enregistrement
    Par Farbin dans le forum Access
    Réponses: 6
    Dernier message: 08/08/2006, 16h37
  3. Réponses: 1
    Dernier message: 26/04/2006, 09h52
  4. Voir un seul enregistrement
    Par PrinceMaster77 dans le forum SQL
    Réponses: 1
    Dernier message: 15/11/2004, 16h51
  5. ROLLBACK sur une seul enregistrement
    Par toctoc80 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/04/2004, 20h22

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