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 :

Trigger before insertion


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 6
    Par défaut Trigger before insertion
    Bonjour,

    Etant habitué d'oracle j'ai un peu du mal avec sqlserver.
    Je fais des insertions dans ma table et dans cette insertion il y a deux champs FR et UK. Les deux champs peuvent être à NULL.

    J'essaie de faire un trigger before (avec les rollback j'ai vu qu'on pouvait) mais j'y arrive pas la syntaxe est différente d'oracle.
    Il faudrait que pendant l'insertion on vérifie que au moins un des deux champs soit rempli ou que les deux ne soient pas à NULL à la fois.

    Pouvez vous m'aider?

    Merci.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Il n'existe pas de trigger BEFORE avec SQL Server et d'ailleurs vous n'en avez pas besoin.
    Il existe en revanche des trigger INSTEAD OF (un seul par table/action) et des trigger AFTER (autant que vous voulez) dans lesquels vous pouvez faire un ROLLBACK.

    Néanmoins, pour cette règle, une contrainte CHECK sera laregment suffisante et mille fois plus rapide.

    Démo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE T (C1 INT, C2 INT);
     
    ALTER TABLE T
       ADD CONSTRAINT CK_C1_OR_C2 
          CHECK ((C1 IS     NULL AND C2 IS NOT NULL) OR 
                 (C1 IS NOT NULL AND C2 IS     NULL));
    Test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    INSERT INTO T VALUES (1, NULL);
    GO                          
    INSERT INTO T VALUES (NULL, 2);
    GO                          
    INSERT INTO T VALUES (1, 2);
    GO             
    INSERT INTO T VALUES (NULL, NULL);
    GO
    Résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    (1*ligne(s) affectée(s))
     
    (1*ligne(s) affectée(s))
    Msg*547, Niveau*16, État*0, Ligne*1
    L'instruction INSERT est en conflit avec la contrainte CHECK "CK_C1_OR_C2". Le conflit s'est produit dans la base de données "HOTEL", table "dbo.T".
    L'instruction a été arrêtée.
    Msg*547, Niveau*16, État*0, Ligne*1
    L'instruction INSERT est en conflit avec la contrainte CHECK "CK_C1_OR_C2". Le conflit s'est produit dans la base de données "HOTEL", table "dbo.T".
    L'instruction a été arrêtée.
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 6
    Par défaut
    Merci pour votre réponse pertinente!

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

Discussions similaires

  1. [10g] Trigger before insert
    Par Lung dans le forum Oracle
    Réponses: 6
    Dernier message: 21/12/2007, 16h22
  2. Trigger Before Insert et Before Update
    Par NicoNours dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 14/08/2007, 10h20
  3. Trigger : Before insert
    Par guitou0 dans le forum Développement
    Réponses: 6
    Dernier message: 29/06/2007, 11h39
  4. Trigger Before Insert
    Par Fred_ET dans le forum Administration
    Réponses: 7
    Dernier message: 22/11/2006, 00h29
  5. Créer un trigger "before insert" avec SQL Server
    Par bubi dans le forum Développement
    Réponses: 2
    Dernier message: 14/11/2005, 10h12

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