Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1757 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  stored procedure

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

stored procedure

n°2153927
babache883​10
Posté le 22-08-2012 à 20:36:50  profilanswer
 

Bonjour!
 
 
Voilà je veux cree une procedure stockée qui ajoute une ligne dans ma_table
 cette ligne comporte une colonne guid, une colonne table_id et une colonne name
je veux que ca me génère automatiquement le guid et l'id comme je ne peux pas les entrée et sont uniques dans ma base de données.
Quelqu'un pourrait me guider sur ce sujet?? please :D

mood
Publicité
Posté le 22-08-2012 à 20:36:50  profilanswer
 

n°2153950
Oliiii
Posté le 23-08-2012 à 09:12:11  profilanswer
 

Avec quel SGBD? :)

n°2153952
babache883​10
Posté le 23-08-2012 à 09:20:21  profilanswer
 

Je fais la procedure(fin le script) SQL Server 2005

n°2153953
babache883​10
Posté le 23-08-2012 à 09:27:11  profilanswer
 

voila ce que j'ai essayE de faire(pour vous donner une idee):
DROP PROCEDURE ma_table
CREATE PROCEDURE ma_table
 
     @id int OUTPUT,
     @guid UNIQUEIDENTIFIER OUTPUT,
     @name varchar(120) ,
     @hr numeric(17,6) ,
            @date datetime  
   
             
 AS  
 BEGIN  
 
   
      SET NOCOUNT ON  
      SET @id = @@IDENTITY  
      SET @guid = NEWID()
     
 
      INSERT INTO table
           (  
    id,
    name,
                         hour,
                         date,
                         guid          
            )  
   VALUES
           (  
             @id + 1,
      @name,
      @hour,
      @date ,            
      @guid
           )  
   
 END  
 
GO
 
 

n°2153978
Oliiii
Posté le 23-08-2012 à 11:41:22  profilanswer
 

Dans la définition de ta table ajoute IDENTITY(1,1) pour ton ID, comme ca tu auras ton ID automatique.
 
Pour le reste tu peux faire comme ca:
CREATE PROCEDURE ma_table
     @name varchar(120) ,
     @hr numeric(17,6) ,
     @date datetime  
as
 
INSERT table (name, hour, date, guid)
VALUES (@name, @hr, @date, NEWID())
 
GO
 
Les infos pour IDENTITY: http://msdn.microsoft.com/en-us/li [...] 90%29.aspx

n°2153984
babache883​10
Posté le 23-08-2012 à 12:13:39  profilanswer
 

Oliiii tu me sauves juste la vie :) Merciiiii :)

n°2153985
babache883​10
Posté le 23-08-2012 à 12:23:23  profilanswer
 

Mais il y aun hic Olii :s
 
En faite je ne peux pas modifier ma table et ajouter IDENTITY(1,1) pour l' ID

n°2154066
Oliiii
Posté le 24-08-2012 à 08:29:06  profilanswer
 

Tu ne peux pas a cause d'un probleme technique ou a cause d'un autre probleme?
 
Sinon tu ne peux pas utiliser @@identity pour generer l'ID, ca ne te retourne que la derniere valeur IDENTITY (qui sera null ici vu que tu n'as pas de colonne IDENTITY(x,x))
 
Le moyen rapide et pas super est de faire un Select MAX(ID) FROM table pour avoir le dernier ID et de faire un +1.
Ca ne fonctionne plus si tu as deux personne qui lancent la procedure en meme temps (il y a une chance qu'ils aient la meme ID)
Donc il faut gerer des locks sur la table pour empecher les inserts, ce qui reduit la vitesse en bloquant tout le monde.
 
M'enfin, tu vois que c'est beaucoup de problemes pour pas grand chose, si la raison poru la quelle tu ne peux pas ajouter IDENTITY(1,1) a ta table est a cause d'une décision de structure de la DB tu peux expliquer en quoi c'est une mauvais idée de s'en passer.
 
Une autre facon qui fonctionne toujours est de simuler la facon dont IDENTITY(1,1) fonctionne:
Tu crées une autre table avec les colonnes TableName et LastID et tu utilises cette query pour recevoir un ID qui sera unique sans bloquer personne:
UPDATE TABLE MonAutreTable
 Set LastID = LastID + 1
OUTPUT inserted.LastID
Where TableName = 'ma_table'
 
Il faut initialiser la table la premiere fois, tu mets une ID assez grande pour ne pas avoir de confilit avec la table actuelle.
 
Il faut que toute les procedures qui font des insert dans la table utilisent cette technique ou tu pourrais avoir des problemes de duplicate key (vu que LastID ne sera plus synchro avec la ma_table).


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  stored procedure

 

Sujets relatifs
appelle procédure Oracle depuis onclick java[Résolu] SQL Server / Procédure stockée avec paramètres optionnels
Mysql procedure stockee : boucle infinieNom d'une procédure comme jdoc:
Appel de procédure : variable non renvoyéeProcédure d'installation sur windows
[PL/SQL] Erreur création procédureUtiliser Enterprise Library avec Oracle Stored Procedure
Java stored procedure[Oracle]Java Stored procedure
Plus de sujets relatifs à : stored procedure


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR