[SQL Server 2000]Petite aide sur les procédures stockées

Petite aide sur les procédures stockées [SQL Server 2000] - SQL/NoSQL - Programmation

Marsh Posté le 05-01-2007 à 11:59:01    

Bonjour,
 
Je n'y connais pas grand chose en procédures stockées, et j'aurais besoin d'un petit coup de main.
 
Le code n'est pas de moi (c'est de l'Open Source).
Il s'agit du code d'un forum, pour lequel j'ai un gros bug.
Pour la suppression, édition, création de forum on utilise des procédures stockées en sql, dont voici le code :  
 

Code :
  1. - sp_helptext forums_Forum_CreateUpdateDelete
  2. CREATE PROCEDURE forums_Forum_CreateUpdateDelete
  3. (
  4. @ForumID int out,
  5. @DeleteForum bit = 0,
  6. @Name  nvarchar(256) = '',
  7. @Description nvarchar(3000) = '',
  8. @ParentID int = 0,
  9. @ForumGroupID int = 0,
  10. @IsModerated bit = 1,
  11. @DisplayPostsOlderThan int = 0,
  12. @IsActive  bit = 0,
  13. @EnablePostStatistics bit = 1,
  14. @EnableAutoDelete bit = 0,
  15. @EnableAnonymousPosting bit = 0,
  16. @AutoDeleteThreshold int = 90,
  17. @SortOrder int = 0
  18. )
  19. AS
  20. -- Are we deleting the forum?
  21. IF @DeleteForum = 1
  22. BEGIN
  23. -- delete the specified forum and all of its posts
  24. -- first we must remove all the thread tracking rows
  25. DELETE
  26.  forums_TrackedThreads
  27. WHERE
  28.  ThreadID IN (SELECT DISTINCT ThreadID FROM forums_Threads WHERE ForumID = @ForumID)
  29. -- we must remove all of the moderators for this forum
  30. DELETE
  31.  forums_Moderators
  32. WHERE
  33.  ForumID = @ForumID
  34. -- now we must remove all of the posts
  35. DELETE
  36.  forums_Posts
  37. WHERE
  38.  ForumID = @ForumID
  39. -- finally we can delete the actual forum
  40. DELETE
  41.  forums_Forums
  42. WHERE
  43.  ForumID = @ForumID
  44. RETURN
  45. END


 
Le bug se situe au niveau du  

Code :
  1. DELETE
  2.  forums_Forums
  3. WHERE
  4.  ForumID = @ForumID


 
En fait, la suppression se passe très bien, mais il oublie que d'autres forums peuvent l'avoir en tant que parent (il y a un champ @ParentID).
 
Ce que je voudrais faire donc (ce dont j'ai besoin c'est une traduction en SQL (je crois que c'est du PL/SQL pour les stored procedures non ?) c'est
 
UPDATE forums_FORUMS SET ParentID = 0 WHERE ParentID = @ForumID
 
Ca marche comme ça ?
 
Merci d'avance.

Reply

Marsh Posté le 05-01-2007 à 11:59:01   

Reply

Marsh Posté le 05-01-2007 à 12:25:02    

oui, tu peux faire comme ça (ou avec NULL, ça dépends de la façon dont c'est géré).
tu peux aussi décider de supprimer en cascade les fils. à ce moment, tu ajoute (ou modifie) la FK parent->forumid de façon à faire les delete en cascade.

Reply

Marsh Posté le 05-01-2007 à 13:33:59    

MagicBuzz a écrit :

oui, tu peux faire comme ça (ou avec NULL, ça dépends de la façon dont c'est géré).
tu peux aussi décider de supprimer en cascade les fils. à ce moment, tu ajoute (ou modifie) la FK parent->forumid de façon à faire les delete en cascade.


 
Je veux pas supprimer les fils, je veux juste supprimer le lien parent/enfant en fait.
 
Visiblement ma solution fonctionne, mais s'il y a plus propre ou plus pratique, je suis preneur :D

Reply

Sujets relatifs:

Leave a Replay

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