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 :

fonction génération ID


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
    Juin 2006
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 220
    Par défaut fonction génération ID
    Bonjour

    Je voulais savoir si il serait possible de créer une fonction SQL SERVER qui me récupéré le dernière id de la table en me l’incrémentent de 1.
    l'id de la table est un varchar(36) (Je ne peux pas le changer).

    merci d'avance.

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Citation Envoyé par france38 Voir le message
    l'id de la table est un varchar(36) (Je ne peux pas le changer).


    il faudrait pourtant !

    sinon la solution serait quelque chose du genre :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT MAX(CAST(ColonneID AS BIGINT)) + 1
    FROM MaTable

    m'enfin... déjà qu'avec un bon vieux INT, la méthode n'est pas la mieux, mais alors avec un VARCHAR (de 36 qui plus est ) ça risque d’être catastrophique...

    d'autre part, si vous avez réellement des nombre de 36 chiffres, vous allez avoir un dépassement de capacités, même avec un bigint !

    que representent ces varchar(36) ?

    Quand vous dites que vous ne pouvez pas le changer, ne pouvez vous pas non plus ajouter un colonne INT (ou BIGINT) qui pourrait servir de clef primaire ? ce serait nettement mieux !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 220
    Par défaut
    Enfaite il faut que je transfert des données d'une base à une autre.
    L'ID est normalement générer par le logiciel quand on créer un membre ou autre donc il appelle une fonction qui est create_guid.
    Seulement le problème est que moi je fais des insert et update sur la base et du coup les ids ne sont pas toujours présent
    Exemple si il y a une table membre dans les deux base ceci ne pose pas de problème car je copie aussi l'id.
    Mais si dans la base cible j'ai une table mail que je n'ai pas dans la base source il n'y a pas id donc il faut que je le génère.

    d'autre part, si vous avez réellement des nombre de 36 chiffres, vous allez avoir un dépassement de capacités, même avec un bigint !
    oui mais si je commence a 1 avant qui l'utilise les 36 position il faudra un moment ?

    Quand vous dites que vous ne pouvez pas le changer, ne pouvez vous pas non plus ajouter un colonne INT (ou BIGINT) qui pourrait servir de clef primaire ? ce serait nettement mieux !
    Non car le logiciel qui se sert de cette base (sugarCRM) utilise la colonne id.

  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 010
    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 010
    Billets dans le blog
    6
    Par défaut
    Comment voulez-vous incrémenter un littéral ???? Cela n'a pas de sens !
    La base ayant été mal modélisée, le seul remède est de bien la modéliser.
    En informatique il n'y a pas de miracle :
    garbage in, garbage out comme disent les ricains.... QUi peut se traduire par :
    si t'as de la merde en entrée, tu auras de la merde en sortie !

    Commencez donc par modéliser correctement votre base.
    De plus un VARCHAR c'est contre performant pour une clef, et en sus 36 de longueur c'est plus que stupide, sauf si vous avez décidé de tuer sciemment les performances !

    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
    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,

    create_guid
    Cela semble plutôt être une valeur de type uniqueidentifier, qui peut effectivement être transtypée en char(36).
    Chui pas prêt de recommander SugarCRM ...

    Mais si dans la base cible j'ai une table mail que je n'ai pas dans la base source il n'y a pas id donc il faut que je le génère.
    Ben il suffit de le copier aussi

    Comme on n'est pas avec une valeur entière, et qu'il me semble que le type est uniqueidentifier, vous pouvez générer des valeurs avec les fonctions NEWID() et NEWSEQUENTIALID(), la seconde étant à peine un peu mieux pour les clés primaires.

    @++

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 220
    Par défaut
    Comment voulez-vous incrémenter un littéral ???? Cela n'a pas de sens !
    Je n'en sais strictement rien c'est pour ça que je cherche une solution.

    Commencez donc par modéliser correctement votre base.
    De plus un VARCHAR c'est contre performant pour une clef, et en sus 36 de longueur c'est plus que stupide, sauf si vous avez décidé de tuer sciemment les performances !
    Oui mais ça c'est pas a moi qui faut le dire il y a le site de sugarcrmpour ça.
    Moi ce que je sais, c'est que à défaut d'avoir de la "merde en sortie" j'ai une NOTE à la sortie.

    Expliquer moi comment je peux changer la base sans toucher au logiciel ???


    Comme on n'est pas avec une valeur entière, et qu'il me semble que le type est uniqueidentifier, vous pouvez générer des valeurs avec les fonctions NEWID() et NEWSEQUENTIALID(), la seconde étant à peine un peu mieux pour les clés primaires.
    merci je vais voir.

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    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 010
    Billets dans le blog
    6
    Par défaut
    Donc, la réponse à votre question primale est NON.
    Et si vous devez avoir une note, c'est 20 sur 20, si vous me répondez non !

    A partir du moment ou la question est absurde, aucune solution n'est possible !

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

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

Discussions similaires

  1. [XL-2003] Fonction génération des lettres des colonnes Excel?
    Par garheb dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/07/2011, 13h08
  2. Génération de la fonction distance level-sets
    Par kamelcompte dans le forum Images
    Réponses: 1
    Dernier message: 16/05/2008, 17h24
  3. Fonction UTL_FILE : génération d'un CR/LF parasite
    Par strikerm59 dans le forum SQL
    Réponses: 0
    Dernier message: 26/03/2008, 09h37
  4. défaut des fonctions de génération de nombres aléatoire type rand()
    Par Christophe30 dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 17/02/2008, 20h21
  5. Fonction de génération aléatoire gaussienne
    Par Linio dans le forum Langage
    Réponses: 5
    Dernier message: 13/08/2007, 12h57

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