Bonjour,
j'ai une procédure stockée, et j'y fais passer en paramètre un uniqueidentifier. seulement j'aimerais y faire passer toute une liste, est-ce possible ?

je vous montre :

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
84
85
86
87
88
89
90
91
CREATE FUNCTION get_distance_metres(@latitudeDepart FlOAT, @longitudeDepart FLOAT, @latitudeArrivee FLOAT, @longitudeArrivee FLOAT)
RETURNS FLOAT
AS
BEGIN
	DECLARE @radLongitudeDepart FLOAT, @radLatitudeDepart FLOAT, @radLongitudeArrivee FLOAT, @radLatitudeArrivee FLOAT, @dlo FLOAT, @dla FLOAT, @a FLOAT
 
	SET @radLongitudeDepart = RADIANS(@longitudeDepart)
    SET @radLatitudeDepart = RADIANS(@latitudeDepart)
    SET @radLongitudeArrivee = RADIANS(@longitudeArrivee)
    SET @radLatitudeArrivee = RADIANS(@latitudeArrivee)
 
	SET @dlo = (@radLongitudeArrivee - @radLongitudeDepart) / 2
    SET @dla = (@radLatitudeArrivee - @radLatitudeDepart) / 2
 
    SET @a = SIN(@dla) * SIN(@dla) + COS(@radLatitudeDepart) * COS(@radLatitudeArrivee) * SIN(@dlo) * SIN(@dlo)
    RETURN (6378137 * 2 * ATN2(SQRT(@a), SQRT(1 - @a)))
END
GO
 
CREATE PROCEDURE SearchInZone
@id_region uniqueidentifier, @id_departement uniqueidentifier, @id_chef_lieu_departemental uniqueidentifier, @id_canton uniqueidentifier, @id_ville_depart uniqueidentifier, @rayon INT
AS
	/* nous partons d'un point de départ, le centre de la zone de recherche */
	DECLARE @latitude_depart FLOAT, @longitude_depart FLOAT
 
	SELECT
		@latitude_depart = latitude,
		@longitude_depart = longitude
	FROM
		Ville
	WHERE
		id_ville = @id_ville_depart
 
	/* variable de construction de la requete */
	DECLARE @requete VARCHAR(1000), @req_GDM VARCHAR(100),  @i INT
 
	SET @req_GDM = 'dbo.get_distance_metres(' + CONVERT(VARCHAR, @latitude_depart) + ', ' + CONVERT(VARCHAR, @longitude_depart) + ', latitude, longitude)'
	SET @requete = 'SELECT id_ville, nom_ville, arrondissement_ville, ROUND(' + @req_GDM + ' / 1000 , 2) AS distance
					FROM Ville V '
	SET @i = 0
 
	/* construction de la requete */
	IF @id_canton IS NOT NULL
		BEGIN
			SET @i = @i + 1
			SET @requete = @requete + 'WHERE V.id_canton = ''' + CONVERT(CHAR(36), @id_canton) + ''''
		END
	ELSE
		BEGIN
			IF @id_chef_lieu_departemental IS NOT NULL
				BEGIN
					SET @i = @i + 1
					SET @requete = @requete + 'WHERE V.id_chef_lieu_departemental = ''' + CONVERT(CHAR(36), @id_chef_lieu_departemental) + ''''
				END
			ELSE
				BEGIN
					IF @id_departement IS NOT NULL
						BEGIN
							SET @i = @i + 1
							SET @requete = @requete + 'WHERE V.id_departement = ''' + CONVERT(CHAR(36), @id_departement) + ''''
						END
					ELSE
						BEGIN
							IF @id_region IS NOT NULL
							BEGIN
								SET @i = @i + 1
								SET @requete = @requete + 'INNER JOIN Departement D ON V.id_departement = D.id_departement
												WHERE D.id_region = ''' + CONVERT(CHAR(36), @id_region) + ''''
							END
						END
				END
		END
 
	/* intégration du périmètre de recherche */
	IF @i = 0
		BEGIN
			SET @requete = @requete + ' WHERE '
		END
	ELSE
		BEGIN
			SET @requete = @requete + ' AND '
		END
 
	SET @requete = @requete + @req_GDM + ' < ' + CONVERT(VARCHAR, @rayon)
 
	/* order by */
	SET @requete = @requete + ' ORDER BY distance ASC'
 
	/* exécution de la reqiête */
	EXEC(@requete)
GO
j'aimerais faire passer plusieurs villes ou canton en paramètre. avez-vous une solution à me proposer svp ? merci