Bonjour,

j'ai écrit une procédure stockée qui prend en paramètres nom, prénom, tel, métier.
je dispose de 3 tables : liste (des personnes), métiers et personne_métiers (sui fait le lien entre 1 personne et 1 ou plieurs métiers).
la procédure ne porte que sur le test suivant le nom.

Comme vous pourrez le constater, elle est très longue au regard de ce qu'elle est censée faire (les tables ont très peu de ligne heureusement!). Notamment le même fragment de code (création d'un couple ID_personne/ID_métier) apparaît à chaque test. Comment pourrais-je "optimiser" cette procédure? avec quelles outils? Peut-on intégrer des fonctions à l'intérieur des procédures?...
Merci.

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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
 
ALTER PROCEDURE [dbo].[creer_personne_plusieurs_tables]
	-- paramètres procédure
	@Nom nchar(10), @Prenom nchar(10), @Tel varchar(50), @Metier nvarchar(50)
AS
 
--1er CAS : Metier connu et Nom connu : =ajouter un métier connu à 1 personne déjà connue.
	IF EXISTS (SELECT Nom FROM Liste WHERE Nom=@Nom) AND EXISTS (SELECT Metier FROM Metier WHERE Metier=@Metier)
 
	BEGIN
		--insertion d'un nouveau couple ID_personne/ID_métier à la table personne_metier
		INSERT INTO personne_metier (ID_personne, ID_metier)
 
				SELECT l.ID_personne, m.ID_metier FROM Liste l, Metier m
				WHERE 
					m.metier=@Metier and l.nom=@Nom
 
	END
 
 
--2ème CAS : Metier connu et Nom inconnu
	IF NOT EXISTS (SELECT Nom FROM Liste WHERE Nom=@Nom) AND EXISTS (SELECT Metier FROM Metier WHERE Metier=@Metier)
 
	BEGIN
		--insertion du nouveau nom dans la table Liste : création d'un ID correspondant.
		INSERT INTO [Annuaire].[dbo].[Liste]
           ([Nom]
           ,[Prénom]
           ,[Téléphone])
         SELECT
			@Nom,@Prenom,@Tel
 
		--insertion du nouveau couple d'ID (ID de la nouvelle personne et ID du métier déjà connu)
		INSERT INTO personne_metier (ID_personne, ID_metier)
 
				SELECT l.ID_personne, m.ID_metier FROM Liste l, Metier m
				WHERE 
					m.metier=@Metier and l.nom=@Nom
 
	END
 
 
--3ème CAS : Nom connu et Metier inconnu
	IF EXISTS (SELECT Nom FROM Liste WHERE Nom=@Nom) AND NOT EXISTS (SELECT Metier FROM Metier WHERE Metier=@Metier)
 
	BEGIN 
		 --insertion du nouveau métier dans la table métier
		 INSERT INTO [Annuaire].[dbo].[Metier]
			    ([Metier])
		        SELECT @Metier
 
		 --insertion du nouveau couple d'ID (métier/personne)
		 INSERT INTO personne_metier (ID_personne, ID_metier)
 
				SELECT l.ID_personne, m.ID_metier FROM Liste l, Metier m
				WHERE 
					m.metier=@Metier and l.nom=@Nom
	END
 
--4ème CAS : Nom inconnu et métier inconnu
	IF NOT EXISTS (SELECT Nom FROM Liste WHERE Nom=@Nom) AND NOT EXISTS (SELECT Metier FROM Metier WHERE Metier=@Metier)
 
	BEGIN
		--insertion du nouveau nom dans la table Liste : création d'un ID correspondant.
		INSERT INTO [Annuaire].[dbo].[Liste]
           ([Nom]
           ,[Prénom]
           ,[Téléphone])
         SELECT
			@Nom,@Prenom,@Tel
 
		--insertion du nouveau métier dans la table métier
		 INSERT INTO [Annuaire].[dbo].[Metier]
			    ([Metier])
		        SELECT @Metier
 
		--insertion du nouveau couple d'ID (métier/personne)
		 INSERT INTO personne_metier (ID_personne, ID_metier)
 
				SELECT l.ID_personne, m.ID_metier FROM Liste l, Metier m
				WHERE 
					m.metier=@Metier and l.nom=@Nom
	END