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 :

[debutant]cle primaire particuliere


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2002
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 113
    Points : 84
    Points
    84
    Par défaut [debutant]cle primaire particuliere
    Bonjour a tous,

    Je debute avec le sgdb sql serveur 2000 et j'aimerais me faire une table afin d'y stocker mes infos ...

    J'aimerais que ma primary key soit de ce style :
    l'annee, le mois en court et un nombre incremente a chaque nouvel enregistrement ce qui nous donnerait ceci en fait :

    2004081
    2004082
    2004083
    etc...

    Je vois pas trop comment faire si quelqu'un avait une idée ou carrement la solution je lui serait reconnaissant...

    Merci pour vos nombreuses aides ...

    Christophe
    un bouillonnais

  2. #2
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    A mon avis, cette contrainte n'est pas défini en standard par SQL Serveur.

    A faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    1-Créer une table avec un champs auto-incrémenté plus un champs varchar avec primary key
    2-Créer un trigger qui insert la valeur :
     
    SET @Valeur=CAST(GETDATE() AS VARCHAR(4) +CAST(MONTH(GETDATE() AS VARCHAR(4)) + CAST(@@IDENTITY AS VARCHAR(32))
    Merci.

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2002
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 113
    Points : 84
    Points
    84
    Par défaut
    salut salut Laurent,

    Je te remercie deja pour ton post ...express..!

    Mais bon ca ne tourne pas encore...sorry mais je ne suis pas programmeur !

    Voila ce que j'ai fait :

    J'ai cree une table toute simple afin de faire des essais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    create table datePk
    (
    PK_testnum integer identity,
    madate varchar(20) primary key,
    entree varchar(10)
    )
    la table tourne bien sur !

    J'ai donc voulu cree le trigger mais c'est la que cela coince :

    voila ce que j'ai fait et voila ce qu'il me dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    --creation du trigger
    create trigger transforme 
     
    ON datePk
     
         FOR  insert
    AS 
    SET @Valeur=CAST(GETDATE() AS VARCHAR(4) +CAST(MONTH(GETDATE() AS VARCHAR(4)) + CAST(@@IDENTITY AS VARCHAR(32))
    qd je fais F5 sql serveur me repond =>erveur : Msg 170, Niveau 15, État 1, Procédure transforme, Ligne 18
    Ligne 18 : syntaxe incorrecte vers '+'.

    J'ai essaye de mettre des parentheses , d'en supprimer...etc...bref je vois pas trop ! Pour moi la syntaxe du trigger est correcte!

    Si tu sais m'aider !

    Je te remercie vraiment et te souhaite un excellent week end ..

    Ciao

    Christophe

  4. #4
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Comme un exemple vaut mieux qu'un long discours, le code ci-dessous pourra vous orienter.

    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
    CREATE TABLE T_EXAMPLE (
    	EX_ID int IDENTITY (1, 1) NOT NULL ,
    	EX_PK varchar (50) NOT NULL PRIMARY KEY,
    	EX_VALUE int NULL 
    ) ON PRIMARY
    GO
    CREATE   TRIGGER TG_PK ON T_EXAMPLE
    AFTER INSERT
    AS
    BEGIN
    	DECLARE @YY VARCHAR(4)
    	DECLARE @MM VARCHAR(2)
    	SELECT @YY=CAST(YEAR(GETDATE()) AS VARCHAR(4)),
    	       @MM=CAST(MONTH(GETDATE()) AS VARCHAR(2))
    	IF LEN(@MM)=1 SELECT @MM='0' + @MM
     
    	UPDATE T_EXAMPLE
    	SET EX_PK=@YY + '_' + @MM + '_' + CAST(@@IDENTITY AS VARCHAR(32))
    	FROM INSERTED I JOIN T_EXAMPLE E
    		ON  I.EX_PK=E.EX_PK
    END
    GO
    INSERT INTO T_EXAMPLE(EX_VALUE,EX_PK)
    VALUES(1977,'')
    GO

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2002
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 113
    Points : 84
    Points
    84
    Par défaut
    salut salut Laurent,

    J'ai cru que je ne reverrai jamais le ....forum :-)!

    Je te remercie vraiment pour cet exemple complet...et qui tourne parfaitement ...c'est vraiment sympa !

    J'ai juste une p'tite derniere question ...sorry de t'embeter mais y'a un truc que je ne pige pas!

    Dans ton exemple, lds la ligne ci dessous le I il vient d'ou et sert a quoi !?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FROM INSERTED I JOIN T_EXAMPLE E
    Je te remercie vraiment ....et le jour ou tu passes ds les ardennes ...fais moi signe !On fait du vin de noix je ne te dis que ca !

    Ciao et encore merci

    christophe

  6. #6
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Le I est un Alias.
    Autrement dit, dans cette requête, le I remplacera INSERTED.
    Sans cette Alias j'aurais posté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FROM INSERTED JOIN T_EXAMPLE
          ON  INSERTED.EX_PK=EXAMPLE.EX_PK
    Aulieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FROM INSERTED I JOIN T_EXAMPLE E 
          ON  I.EX_PK=E.EX_PK
    Qui est plus court.

  7. #7
    Membre régulier
    Inscrit en
    Décembre 2002
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 113
    Points : 84
    Points
    84
    Par défaut Merci Laurent
    Bonjour Laurent,

    Je te remercie vraiment pour le temps que tu as accorde a mon probleme et te souhaite vraiment ...un excellent week end !

    A bientot

    et bonne continuation ...tu es vraiment super fort ...je viens de temps en temps sur le forum sql serveur et rien qu'en lisant tes reply j'apprends ...

    Allez perds pas ton temps a repondre ...

    Ciao

    Christophe

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

Discussions similaires

  1. Déterminer si un champ est une clé primaire
    Par fbalien dans le forum Bases de données
    Réponses: 5
    Dernier message: 23/09/2019, 10h19
  2. Réponses: 8
    Dernier message: 26/09/2005, 22h06
  3. Clé primaire et incrémentation automatique
    Par spacegoogie dans le forum 4D
    Réponses: 4
    Dernier message: 20/06/2005, 10h36
  4. [ db2 ] cle primaire autoincrement
    Par hocinema dans le forum DB2
    Réponses: 4
    Dernier message: 25/02/2004, 14h20
  5. XSD, Cle primaire...
    Par Goupil dans le forum Valider
    Réponses: 3
    Dernier message: 21/10/2003, 09h04

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