stored procedure

stored procedure - SQL/NoSQL - Programmation

Marsh Posté le 22-08-2012 à 20:36:50    

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

Reply

Marsh Posté le 22-08-2012 à 20:36:50   

Reply

Marsh Posté le 23-08-2012 à 09:12:11    

Avec quel SGBD? :)

Reply

Marsh Posté le 23-08-2012 à 09:20:21    

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

Reply

Marsh Posté le 23-08-2012 à 09:27:11    

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
 
 

Reply

Marsh Posté le 23-08-2012 à 11:41:22    

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

Reply

Marsh Posté le 23-08-2012 à 12:13:39    

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

Reply

Marsh Posté le 23-08-2012 à 12:23:23    

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

Reply

Marsh Posté le 24-08-2012 à 08:29:06    

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).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed