Bonjour,
Je souhaite faire un update sur un champs d'une table, qui doit reprendre une donnée provenant d'une table de liaison comprenant l'id de la première table
Pourquoi faire ceci, car la table de liaison est devenue inutile, le but est donc de rapatrier les données dans la première table avant de l'effacer
Table Employes
employe_id
nom
prenom
service_id
Table Service_Employe
service_id
employe_id
Au départ je cherchais à faire quelque chose comme :
Ca ne fonctionne pas car la sous requête renvoit plusieurs lignes (autant que le nombre de ligne de la table Employes)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 update dbo.EMPLOYES set SERVICE_ID = ( select es.SERVICE_ID from dbo.EMPLOYE_SERVICE es, dbo.EMPLOYES e where e.EMPLOYE_ID = es.EMPLOYE_ID )
Pour résoudre cela, j'ai regardé du côté des curseurs, mais j'avoue coincer, d'une part pour la syntaxe, et d'autre part car je ne suis pas sur d'avoir compris la "logique" curseur
L'idée repose dans le
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 DECLARE @id int DECLARE Employee_Cursor CURSOR FOR SELECT EMPLOYE_ID, SERVICE_ID FROM dbo.EMPLOYES OPEN Employee_Cursor; FETCH NEXT FROM Employee_Cursor; WHILE @@FETCH_STATUS = 0 BEGIN set @id = select employe_id from dbo.EMPLOYES WHERE CURRENT OF Employee_Cursor update dbo.EMPLOYES set SERVICE_ID = ( select es.SERVICE_ID from dbo.EMPLOYE_SERVICE es where dbo.employes.employe_id = @id ) WHERE CURRENT OF Employee_Cursor FETCH NEXT FROM Employee_Cursor; END; CLOSE Employee_Cursor; DEALLOCATE Employee_Cursor;
qui ne fonctionne pas, mais il est là pour exprimer ce que je souhaite faire
Code : Sélectionner tout - Visualiser dans une fenêtre à part set @id = select employe_id from dbo.EMPLOYES WHERE CURRENT OF Employee_Cursor
Pour résumer, pour chaque ligne de la table Employe, je souhaite renseigner la colonne "service_id" avec la valeur correspondante dans la table de liaison
1 employé ne peut se trouver que dans 1 seul service
Merci d'avance pour les aides, suggestions et autres !
Partager