Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

RECHERCHE DU PREMIER IDENTIFIANT MANQUANT (TROU) D'UNE TABLE


Information sur la source

Catégorie :Procédure Classé sous : recherche, identifiant, pk, primaire, id Niveau : Débutant Date de création : 06/05/2005 Vu : 2 615

Note :
3,5 / 10 - par 2 personnes
3,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

Description

Ce script sert à optimiser l'insertion d'enregistrements dans une base. La fonction renvoie (dans le cas present pour la table patient) le premier identifiant manquant (PK) dans la table, ainsi plus de discontinuités dans les IDs ...
Cordialement Djhal
 

Source

  • CREATE FUNCTION Find_Id() RETURNS INT
  • AS
  • BEGIN
  • DECLARE @cpt INT
  • DECLARE @tmp INT
  • DECLARE curseur CURSOR FOR
  • (
  • SELECT id_pat
  • FROM patient
  • )
  • OPEN curseur
  • FETCH NEXT FROM curseur
  • INTO @cpt
  • IF @cpt!=NULL
  • BEGIN
  • SET @tmp=@cpt-1
  • END
  • ELSE
  • BEGIN
  • SET @tmp=0
  • END
  • WHILE @@FETCH_STATUS=0
  • BEGIN
  • IF @tmp+1!=@cpt
  • BEGIN
  • CLOSE curseur
  • DEALLOCATE curseur
  • RETURN @tmp+1
  • END
  • SET @tmp=@cpt
  • FETCH NEXT FROM curseur
  • INTO @cpt
  • END
  • CLOSE curseur
  • DEALLOCATE curseur
  • RETURN @tmp+1
  • END
CREATE FUNCTION Find_Id() RETURNS INT
AS
BEGIN
DECLARE @cpt INT
DECLARE @tmp INT

DECLARE curseur CURSOR FOR 
(
	SELECT id_pat 
	FROM patient
)

OPEN curseur

FETCH NEXT FROM curseur
INTO @cpt


IF @cpt!=NULL
BEGIN
          SET @tmp=@cpt-1
END
ELSE
BEGIN
          SET @tmp=0
END

WHILE @@FETCH_STATUS=0
BEGIN	
	IF @tmp+1!=@cpt
	BEGIN
		CLOSE curseur
		DEALLOCATE curseur
		RETURN @tmp+1
	END

	SET @tmp=@cpt

	FETCH NEXT FROM curseur
	INTO @cpt
END

CLOSE curseur
DEALLOCATE curseur

RETURN @tmp+1

END

Conclusion

Afin d'optimiser le script :
- on pourrait faire passer le nom de la table en parametres ( ds le code patient ecrit en dur)
- ordonner la selection des enregistrements
 

Commentaires et avis

signaler à un administrateur
Commentaire de Mindiell le 06/05/2005 13:03:40

Je suis dur aujourd'hui, mais je trouve que vous faites trop compliqué !!! :o)
Je t'ai mis 3, ta source est intéressante, mais c'est beaucoup plus rapide ainsi :

SELECT (id_pat-1) FROM patient
WHERE (id_pat-1)
NOT IN (
SELECT id_pat
FROM patient
)
AND (id_pat-1)>0

Aller ! Réfléchissez un peu ;oP

signaler à un administrateur
Commentaire de FENETRES le 09/05/2005 16:59:11

SVP, un peu de modération... on n'est pas au zoo pour jouer les singes savants !

signaler à un administrateur
Commentaire de Mindiell le 09/05/2005 17:22:35

Désolé, le ton se voulait ironique et non gincant...
Cependant, on est quand même là pour apprendre et donc jouer un peu les singes savants...

Je suis là pour apprendre des autres, et apprendre aux autres...
La source postée est intéressante, mais pas réfléchie à fond je trouve. c'est une critique que j'éspère constructive étant donné que je donne une meilleure solution, non ? ^^

signaler à un administrateur
Commentaire de FENETRES le 09/05/2005 17:29:11

Exact, il s'agit de s'entre aider pas de se moquer.

signaler à un administrateur
Commentaire de Mindiell le 09/05/2005 18:30:51

et mea culpa donc, c'était plus ironique que moqueur...

:pardon:  :pardon:  :pardon:

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Probleme creation cles primaires [ par Usual suspect ] Bonjour, comment creer une cle primaire d'une table en fonction d'un cle primaire d'une autre table (exigence du cahier des charges)? Exemple : table id non autoincremente [ par caudette ] bjr, dans ma fromview j'aimerai que mon identifiant lors de l'insertion des données prenne la valeur du dernier enregistrement +1. mon identifiant n last_insert_id() [ par engelho ] Bonjour,J'utilise un insert pour ajouter une ligne a une table contenant une clef primaire générée automatiquement. Je souhaite ré Requête sur deux indices pointant sur une même table [ par dompro ] Bonjour,Voici ce que je  recherche:    Rencontre avec comme champs Id_Eng1 et Id_Eng2      Engagement avec Id_ HELP ! pour un LIKE '%mot1%mot2%mot3 ........' [ par vladam ] Bonjour,J'ai une problématique aigue ! Je dois faire une recherche en UNE requête SQL (si possible) ...En faite il faut l'équivalent &# Pb Insert into !!!! Urgent ... [ par tousimages ] Voila je n'arrive pas a soumettre cette requete a accessil y a 21 champsid --> numeroAutocivilite, nom , prenom , societe, adr1, adr2 --& requete croisement de table [ par sdisp ] Bonjour, je souhaiterais pouvoir croiser des ligne dans mon tableau, je expliques, j'ai une table de se genre: id id_suivant référence 1 3 recherche multi champs [ par guev ] bonjourje réalise un moteur de recherche multi champs (environ 10) pour un site et ce qui me gène c'est que j'utilise AND dans ma requè Création d'identifiant et concurrence [ par yamzy2 ] Bonjour, j'utilise actuellement MSDE (SQL server) et j'ai besoin de créer un identifiant et de le mettre dans la base de donnée et dans un c Procédure Stockée Recherche dans une table [Urgent] [ par Mr Capone ] Bonjour, je souhaite a l'aide d'une procédure stocké savoir si une valeur existe dans une table mais j'y arrive pas. voici mon code : cre


Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,44 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.