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.
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.
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 !
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.
oui mais si je commence a 1 avant qui l'utilise les 36 position il faudra un moment ?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 !
Non car le logiciel qui se sert de cette base (sugarCRM) utilise la colonne id.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 !
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/ * * * * *
Bonjour,
Cela semble plutôt être une valeur de type uniqueidentifier, qui peut effectivement être transtypée en char(36).create_guid
Chui pas prêt de recommander SugarCRM ...
Ben il suffit de le copier aussiMais 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.
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.
@++![]()
Je n'en sais strictement rien c'est pour ça que je cherche une solution.Comment voulez-vous incrémenter un littéral ???? Cela n'a pas de sens !
Oui mais ça c'est pas a moi qui faut le dire il y a le site de sugarcrmpour ça.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 !
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 ???
merci je vais voir.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.
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/ * * * * *
Partager