begin process at 2010 07 29 22:38:49
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Procédure

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

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


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

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

Auteur : djhal

Ecrire un message privé
Site perso
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


 Sources de la même categorie

Source avec une capture T-SQL - SPLIT SANS TABLE TEMPORAIRE par TheOnlyMaX
Source avec Zip (SQL SERVER) REQUÊTE POUR RECHERCHER UN {GUID} DANS TOUS LES... par lassaad83
[ORACLE]DÉTERMINER LA DATE DU PREMIER JOUR D'UNE SEMAINE PAR... par Bouillou2
T-SQL - PROCÉDURE - STOCKÉE - PLACER DANS UNE TABLE LE RÉSUL... par zavier666
SQL LECTURE IMPORT DE FICHIER TEXTE par PHILIPPO

 Sources en rapport avec celle ci

MYSQL : CRÉATION D'UN GUID par maitredede
SQL SERVER 2005 : RECHERCHE DE CHAMPS PAR LEURS NOMS MULTI B... par skweeky
SQL SERVER - COMMENT REINITIALISER UN CHAMP ID AUTOINCREMENT... par fabrice69
REQUETE DE TEXTE INTEGRAL AVEC MYSQL par rahou
MOTEUR DE RECHERCHE MULTI-MOTS AVEC UNE PROCÉDURE STOCKÉE par Fredon88

Commentaires et avis

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

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 !

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 ? ^^

Commentaire de FENETRES le 09/05/2005 17:29:11

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

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 besoin d'aide pour generer un cle primaire [ par zied86 ] bonjour;j'ai un table contenu (cle,id client,nom client,....)je veux que le cle se génère automatiquement de la forme suivante n° puis id puis anneec' 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é Insertion de donnees dans une table à partir de données de la même table [ par Mynie ] Bonjour !Bloquée depuis des heures sur le problème suivant :J'ai dans ma table 1 une série d'enregistrement que je dois dupliquer dans la même table m Correction de Trigger [ par 4rocky4 ] Bonjour tout le monde,Je voudrai créer des triggers qui permettent de mettre à jour des tables sous Oracle.Par exemple, si on modifie la clef primaire problème de requête [ par suethi75 ] Bonjour tout le monde,Je n'arrive pas à faire une requête. J'ai 3 tables, une s'appelle "produit" avec comme clef primaire "numBijoux", j'ai une autre Problème de requêtes imbriquées [ par sebshiva ] Bonjour, Malgré plusieurs heures de recherche, je ne trouve pas comment faire fonctionner cette requête mysql... SELECT tel.tel_tel, tel.type_tel, adr requete sql, classement match [ par cecile15 ] Bonjour, Je me permets de solliciter votre aide pour réaliser en SQL les scores des équipes puis de les classer. Victoire : 3 points; Egalité: 2 point Mettre plusieurs requetes en une seule [ par enibib ] Bonjour après une recherche sur plusieurs forum je n'arrive pas à trouver une solution a mon problème.Voici a quoi ressemble mes 2 tables :table_1 :Id


Nos sponsors


Sondage...

CalendriCode

Juillet 2010
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,108 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales