Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/01/2011, 10h26   #1
Membre du Club
 
Avatar de Orphey
 
Inscription : septembre 2010
Messages : 58
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : septembre 2010
Messages : 58
Points : 59
Points : 59
Par défaut UNION conditionnel procedure stockée

Bonjour!
Voila dans une procédure stockée je voudrais réaliser ou pas une union en fonction d'un paramètre..
Comment puis-je faire?

voici ma procédure qui ne fonctionne pas:

Code :
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
 
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
 
 
CREATE PROCEDURE [dbo].[spp_GetAdressesList]
 
	@OnlyLinked   bit         = 1,    -- Uniquement les enregistrements qui sont liés a une entité, oui par défaut
	@ObligedId    int         = -1  -- ID d'un enregistrement qui doit obligatoirement figurer dans la liste, quelles que soient les valeurs des autres paramètres
AS 
BEGIN
 
	SELECT 
	   [ID_ADRESS]
      ,[ID_ENT]
      ,[VOI_ADRESS]
      ,[NUM_ADRESS]
      ,[BTE_ADRESS]
      ,[CP_ADRESS]
      ,[VIL_ADRESS]
 
	FROM [ADRESSES]
    WHERE  
	(
 
		(VIL_ADRESS != 'NC' AND VIL_ADRESS != '--')
		AND
		(@OnlyLinked = 0 OR ID_ENT IS NOT NULL)
 
	)
 
	IF (@ObligedId != -1)
	BEGIN
		UNION
			SELECT 
			   [ID_ADRESS]
			  ,[ID_ENT]
			  ,[VOI_ADRESS]
			  ,[NUM_ADRESS]
			  ,[BTE_ADRESS]
			  ,[CP_ADRESS]
			  ,[VIL_ADRESS]
 
			FROM [ADRESSES]
			WHERE  
			ID_ADRESS = @ObligedId
	END
 
END
Voila en gros si @ObligedId est = a -1 je voudrais qu'il ne fasse pas l'union, j'avais fait ca en dynamique, ou je construisait la requete dans un varchar et je l'exécutait à la fin. Mais bon, c'est pas top car ca permet l'injection, je voulais changer ca..
Il râle sur le union, ce n'est pas possible de faire un union dans un if?

Merci pour vos réponses..
Orphey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 12h23   #2
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour,

Rajoute le test sur ta variable dans la clause WHERE ta deuxieme requete :

Code sql :
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
 
CREATE PROCEDURE [dbo].[spp_GetAdressesList]
 
	@OnlyLinked   bit         = 1,    -- Uniquement les enregistrements qui sont liés a une entité, oui par défaut
	@ObligedId    int         = -1  -- ID d'un enregistrement qui doit obligatoirement figurer dans la liste, quelles que soient les valeurs des autres paramètres
AS 
BEGIN
 
	SELECT 
		[ID_ADRESS]
      		,[ID_ENT]
      		,[VOI_ADRESS]
      		,[NUM_ADRESS]
      		,[BTE_ADRESS]
      		,[CP_ADRESS]
      		,[VIL_ADRESS]
	FROM 
		[ADRESSES]
	WHERE(
 		VIL_ADRESS != 'NC' 
		AND VIL_ADRESS != '--'
		AND (
			@OnlyLinked = 0 
			OR ID_ENT IS NOT NULL
		)
	)
	UNION
	SELECT 
		[ID_ADRESS]
		,[ID_ENT]
		,[VOI_ADRESS]
		,[NUM_ADRESS]
		,[BTE_ADRESS]
		,[CP_ADRESS]
		,[VIL_ADRESS]	  
	FROM 
		[ADRESSES]
	WHERE  
		ID_ADRESS = @ObligedId
		AND @ObligedId != -1
 
 
END
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 12h36   #3
Membre du Club
 
Avatar de Orphey
 
Inscription : septembre 2010
Messages : 58
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : septembre 2010
Messages : 58
Points : 59
Points : 59
ok ct donc si simple... J'ai presque honte..
Merci..
Orphey est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h56.


 
 
 
 
Partenaires

Hébergement Web