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 :

insertion automatique de la date de création d'un enreg / Date de modif


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 202
    Par défaut insertion automatique de la date de création d'un enreg / Date de modif
    Bonjour,

    Existe t il un attribut particulier sur les champs ou les tables permettant d'insérer automatique la date de création d'un enreg ainsi que la date de modif ?

    Quel est le meilleur moyen pour garder un historique des différentes valeurs d'une table ?

    D'avance merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 202
    Par défaut Création d'index par sécurité - regles de l'art
    Bonjour,

    J'ai une table qui contient deux champs pour lesquels je ne veux pas de doublons.
    D'un point de vue fonctionnel, l'appli est conçue pour ne jamais insérer des doublons dans ce couple de champ.

    Ceci dit, par sécurité, je voudrais créer un index sur ces deux champs (index unique), de sorte que ça claque une erreur en cas de bug dans l'appli (si cette derniere insere un doublon).

    Les index sont ils conçus pour répondre à ce genre de problématique ou bien est ce que je veux faire est est dehors des regles de l'art ?

    D avance merci

  3. #3
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Réponse à votre 1er post :

    Effectuez le test suivant :

    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
    36
    37
    38
    39
    40
    41
    42
     
    CREATE TABLE TEST
    (
    	IDTest INT IDENTITY CONSTRAINT PK_TEST PRIMARY KEY,
    	val INT NOT NULL,
    	DateCreation DATETIME NOT NULL CONSTRAINT DF_TEST_DateCreation DEFAULT GETDATE(),
    	DateModification DATETIME
    )
    GO
     
    INSERT INTO dbo.TEST (val, DateModification) VALUES (1, GETDATE())
    WAITFOR DELAY '00:00:05'
    INSERT INTO dbo.TEST (val, DateModification) VALUES (2, GETDATE())
    WAITFOR DELAY '00:00:05'
    INSERT INTO dbo.TEST (val, DateModification) VALUES (3, GETDATE())
    GO
     
    SELECT *
    FROM dbo.TEST
    GO
     
    -- Maintient la date de modification
    CREATE TRIGGER TR_AU_TEST
    	ON dbo.TEST
    AFTER UPDATE
    AS
    BEGIN
    	UPDATE dbo.TEST
    	SET DateModification = GETDATE()
    	FROM dbo.TEST T
    	JOIN INSERTED I ON I.IDTest = T.IDTest
    END
    GO
     
    UPDATE dbo.TEST
    SET val = 8
    WHERE IDTest = 1
    GO
     
    SELECT *
    FROM dbo.TEST
    GO
    En conclusion :

    Existe t il un attribut particulier sur les champs ou les tables permettant d'insérer automatique la date de création d'un enreg
    Vous pouvez utiliser le type de de données TIMESTAMP je crois, mais je ne vous le conseille pas.
    Sinon vous pouvez faire comme je viens de vous le montrer, avec un contrainte de valeur par défaut.

    ainsi que la date de modif ?
    Avec un trigger, c'est le seul moyen de ne pas répéter le code de mise à jour de cette date dans toutes les procédures stockées qui effectuent des mises à jour sur cette table.

    Quel est le meilleur moyen pour garder un historique des différentes valeurs d'une table ?
    Vous pouvez créer une table d'annexe avec une clé étrangère référençant la table source, et une colonne de type DATETIME dans laquelle vous stockez toutes les dates de mise à jour avec un trigger.

    Réponse à votre 2nd post :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER TABLE maTable
    ADD CONSTRAINT UQ_maTable_mesColonnes UNIQUE(colonne1, colonne2)
    GO

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 001
    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 : 22 001
    Billets dans le blog
    6
    Par défaut
    Existe t il un attribut particulier sur les champs ou les tables permettant d'insérer automatique la date de création d'un enreg ainsi que la date de modif ?
    Rien n'existe par défaut dans une base de données relationnelle. Vous devez donc mettre dans les tables ce sont vous avez besoin.
    Donc dans votre cas, vous devez rajouter une colonne de type DATETIME avec comme valeur par défaut CURRENT_TIMESTAMP ce qui l'alimentera avec la date/heure de création de la ligne. (il n'y a pas "d'enregistrements " dans une base de données, nous n'en somme plus au temps des "fichiers")

    Quel est le meilleur moyen pour garder un historique des différentes valeurs d'une table ?
    Historiser dans une table d'historisation via un trigger.
    Lisez l'article que j'ai écrit à ce sujet : http://www.sqlspot.com/Historisation-des-donnees.html

    J'ai une table qui contient deux champs pour lesquels je ne veux pas de doublons. D'un point de vue fonctionnel, l'appli est conçue pour ne jamais insérer des doublons dans ce couple de champ.
    Ceci dit, par sécurité, je voudrais créer un index sur ces deux champs (index unique), de sorte que ça claque une erreur en cas de bug dans l'appli (si cette derniere insere un doublon).
    Les index sont ils conçus pour répondre à ce genre de problématique ou bien est ce que je veux faire est est dehors des regles de l'art ?
    Un index sert à accélérer les recherches. Il ne sert à rien dans ce cas précis. En revanche il vous faut ajouter une contrainte d'unicité. Lisez ce que j'ai écrit à ce sujet : http://sqlpro.developpez.com/cours/s...partie2#L7.2.2

    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/ * * * * *

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 202
    Par défaut
    Merci pour vos réponse.

    Interessant d'utiliser les triggers pour faire une table d'historisation.

    Cependant, existe t il un moyen de se débrouiller avec la log binaire pour retrouver l'historique ?
    Est ce propre ?

    A+

  6. #6
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Vous voulez lire le journal de transactions pour gérer cela ?
    C'est de la pure folie, et c'est pourquoi MS ne fournit aucun outil permettant de lire le journal des transactions.
    Il en existe des payants, mais leur utilisation n'est pas garantie par leurs éditeurs.

    @++

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 202
    Par défaut
    Quel est le role des logs alors ?
    Je pensais qu'on pouvait reconstituer la base de données jusqu'a une date t à partir de ces logs. Est ce exact ?

Discussions similaires

  1. Parser une date suivi d'un fuseaux horaire (date+02:00) et conversion en Date.
    Par SpeedOverflow dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 30/06/2013, 13h37
  2. Réponses: 3
    Dernier message: 21/07/2010, 09h53
  3. insertion automatique de la date du jour
    Par hugue dans le forum Access
    Réponses: 2
    Dernier message: 23/01/2007, 11h35
  4. Réponses: 3
    Dernier message: 03/11/2006, 15h30
  5. Réponses: 6
    Dernier message: 03/10/2006, 09h00

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