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 :

Récupérer le dernier ROWGUIDCOL inséré


Sujet :

Développement SQL Server

  1. #1
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    794
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 794
    Points : 987
    Points
    987
    Par défaut Récupérer le dernier ROWGUIDCOL inséré
    Bonjour,

    Je souhaite savoir si il existe une équivalent à SCOPE_IDENTITY() pour les clefs primaines de type UNIQUEIDENTIFIER ROWGUIDCOL . Je suis obligé d'utiliser ce type, car ma table possède un champs filestream mais du coup je suis coincé car je ne sais pas du tout comment récupérer le dernier Guid généré.

    La table en question

    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
    CREATE TABLE dbo.MobileUser (
    	Id [UNIQUEIDENTIFIER] DEFAULT NEWSEQUENTIALID() ROWGUIDCOL NOT NULL,
    	Hash VARCHAR(160) NOT NULL,
    	Active BIT NOT NULL,
    	BirthYear INT NOT NULL,
    	Gender CHAR(1) NOT NULL,
    	NickName NVARCHAR(60) NOT NULL,
    	[Image] VARBINARY(MAX) FILESTREAM NULL,
    	Grade SMALLINT NULL DEFAULT(0),
    	CONSTRAINT PK_MOBILEUSER PRIMARY KEY (Id),
    	CONSTRAINT CHK_GENDER CHECK (Gender IN ('M', 'F', 'L', 'G', 'B', 'T', 'Q', 'I')),
    	CONSTRAINT CHK_BIRTHDAY CHECK (BirthYear > 1900),
    	CONSTRAINT UNQ_NICKNAME UNIQUE (NickName),
    	CONSTRAINT UNQ_HASH UNIQUE (Hash)
    )
    ON [PRIMARY]
    FILESTREAM_ON FS_VOX_GROUP_1
    GO
    Je vous remercie par avance de votre aide précieuse.

  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 772
    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 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    Non, cela n'est pas possible.
    Vous ne devez pas utiliser une colonne ROWGUIDCOL comme PRIMARY KEY. De plus utiliser un GUID comme clef est une imbécilité au niveau des performances.
    Ajoutez une clef primary auto incrémentée et faites de cette colonne ROWGUIDCOL une contrainte d'unicité !

    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
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    794
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 794
    Points : 987
    Points
    987
    Par défaut
    Ah du coup ça devrait marcher avec le filestream même si la colonne n'est pas clef primaire ?

  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
    21 772
    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 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    Oui. La propriété ROWGUIDCOL est un indicateur pour la table, de la colonne ayant une information absolument unique de manière universelle, et il ne peut y en avoir qu'une seule par table. Ceci est nécessaire pour deux raisons :
    1) vous pouvez avoir plusieurs valeurs de clef primaires identiques, successives si la table fait l'objet de lignes supprimées (reprise d'identity).
    2) il faut garantir l'unicité d'identification du FILESTREAM même s'il existe plusieurs tables dans lesquelles vous avez mis du FILESTREAM

    C'est pourquoi il est important que chacun fasse son travail en toute indépendance :
    • ID auto incrémenté en PK pour retrouver une ligne dans la table
    • La colonne ROWGUIDCOL pour retrouve le bon FILESTREAM dans le stockage FILESTREAM commun à toutes les tables.


    Pour information, la version Enterprise, permet d'avoir de multiples conteneurs FILESTREAM (par exemple un par table) alors qu'en standard vous êtes limité à un par base...

    Pour plus d'information à ce sujet, lisez :
    Nom : Couverture livre SQL server Eyrolles.jpg
Affichages : 234
Taille : 105,0 Ko

    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
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Vous ne devez pas utiliser une colonne ROWGUIDCOL comme PRIMARY KEY. De plus utiliser un GUID comme clef est une imbécilité au niveau des performances.
    Ajoutez une clef primary auto incrémentée et faites de cette colonne ROWGUIDCOL une contrainte d'unicité !
    J'avais expliqué ça à mes anciens collègues vietnamiens et ils étaient bien d'accord. Mais ils ont quand même mis le GUID comme clef primaire et leurs tests de performance étaient bons ! Avec 200 lignes, ça marchait très bien
    Bon évidemment, l'indexation était un accessoire inutile aussi...
    Heureusement, c'est un produit que personne n'a acheté !

Discussions similaires

  1. Récupérer le dernier enregistrement inséré
    Par jockerse dans le forum SQLite
    Réponses: 5
    Dernier message: 03/04/2014, 19h52
  2. Récupérer le dernier enregistrement inséré dans une table
    Par pierre24 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/10/2008, 11h45
  3. Récupérer le dernier id inséré
    Par Herman dans le forum Développement de jobs
    Réponses: 12
    Dernier message: 05/08/2008, 12h16
  4. Récupérer le dernier numéro inséré
    Par Hell dans le forum Access
    Réponses: 4
    Dernier message: 09/01/2005, 15h45
  5. Comment récupérer l'index du dernier élément inséré ?
    Par Didier100 dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/07/2004, 22h41

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