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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Boucle de DELETE en fonction d'un SELECT

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Boucle de DELETE en fonction d'un SELECT

n°1889443
Cheinz
Posté le 29-05-2009 à 14:15:48  profilanswer
 

Bonjour,

 

J'ai une question peut être un peu bête mais dont je n'arrive pas a trouver la réponse...

 

J'ai une base de données SQL Server dans laquelle je dois faire une série de DELETE dans des tables, tout ça en fonction d'un paramètre affai_id. On m'a filé une requête qui me permet de récupérer le nom des tables où est présent la colonne affai_id, je dois donc supprimer partout ou il y a cette colonne.

 

Sauf que je ne veux pas faire 50 delete from table where affai_id=param à la main mais plutôt le faire en automatique grâce au select.

 

Comment faire ça? J'ai essayé un curseur mais je n'ai pas tout saisi/réussi...

 

Merci d'avance.

 

EDIT: Je précise qu'il n'y a pas de schéma relationnel et qu'il y a environ 130 tables.


Message édité par Cheinz le 29-05-2009 à 15:08:42
mood
Publicité
Posté le 29-05-2009 à 14:15:48  profilanswer
 

n°1889522
Cheinz
Posté le 29-05-2009 à 15:24:07  profilanswer
 

Voilà ce que j'ai fais:

Code :
  1. BEGIN TRANSACTION Transa
  2. DECLARE @OLD_AFFAI VARCHAR(6)
  3. SELECT @OLD_AFFAI='037196'
  4. DECLARE @table_name varchar(50)
  5. DECLARE curseur_test CURSOR FOR
  6. SELECT TABLES.name AS "TABLE" FROM dbo.syscolumns as COLONNES
  7.  INNER JOIN dbo.sysobjects as TABLES
  8.  ON TABLES.ID = COLONNES.ID
  9.  INNER JOIN dbo.systypes AS TYPES
  10.  ON TYPES.xtype = COLONNES.xtype
  11.  WHERE TABLES.xtype = 'U'
  12.  and COLONNES.name like '%AFFAI_ID%'
  13. OPEN curseur_test
  14. FETCH curseur_test INTO @table_name
  15.  WHILE @@FETCH_STATUS = 0 BEGIN
  16.   PRINT @table_name
  17.   --delete from @table_name where affai_id=@OLD_AFFAI
  18.   FETCH NEXT FROM curseur_test INTO @table_name
  19.  END
  20. CLOSE curseur_test
  21. DEALLOCATE curseur_test
  22. ROLLBACK TRAN Transa


Cette requête marche et m'affiche les tables concernées.
 
Si j'enlève le commentaire sur la ligne de delete il me dit que @table_name n'est pas déclarée...

n°1889565
Cheinz
Posté le 29-05-2009 à 16:30:44  profilanswer
 

Bon j'ai réussi en passant par une requête dynamique.


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

  Boucle de DELETE en fonction d'un SELECT

 

Sujets relatifs
Classement numérique en fonction de 3 critères[Résolu][PHP] debug de la fonction exec
[vb] problème de boucle avec datagridviewSimplifier une boucle
[Résolu][Javascript]Boucle de test et définition de variable.Une fonction qui ne fonctionne qu'une fois !!
Mise en forme d'une boucle while()AJAX fonction globale?
Bug sur Boucle for sur une ligne et sur un test supérieur àpb pour fermer une boucle (calculatrice)
Plus de sujets relatifs à : Boucle de DELETE en fonction d'un SELECT


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