Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
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 19/01/2011, 16h32   #1
Membre régulier
 
Olivier Albertini
Inscription : avril 2006
Messages : 194
Détails du profil
Informations personnelles :
Nom : Olivier Albertini

Informations forums :
Inscription : avril 2006
Messages : 194
Points : 77
Points : 77
Par défaut [SQL SERVER 2008] Passer une variable à un requete.

Bonjour,

J'ai un petit soucis comme vous pouvez imaginer xD. Je récupère le résultat d'une première requête par une variable (@JOUR) puis j'utilise cette variable pour exécuter ma deuxième requête seulement ca marche pas ...

Donc @JOUR reçoit LUNDI et quand j'exécute ma deuxième requête @SQL est égal à LUNDI alors que si j'exécute la deuxième requête en remplaçant @JOUR par LUNDI @SQL est égal à 1 et c'est le résultat attendu ...

Donc je pense que je dois changer la deuxième requête en changeant la façon de passer la variable @JOUR mais je ne sais pas comment...

Des idées ? Merci d'avance !!!!

Code :
1
2
3
4
5
6
7
8
9
10
11
12
	DECLARE @JOUR varchar(32), @SQL varchar(128), @JOUR_ID INT, @CAL_ID INT
	SET @CAL_ID=1
	SET @JOUR_ID=1
	SET @JOUR=(SELECT COL_NAME(OBJECT_ID('dbo.CAL_P'),@JOUR_ID))
	SET @SQL=(SELECT @JOUR FROM CAL  INNER JOIN CAL_P ON CAL.CAL_P_ID=CAL_P.CAL_P_ID WHERE CAL_ID=1)
	PRINT(@SQL)
	IF @SQL IS NULL 
		BEGIN 
		   RAISERROR ('ERREUR de pondération', 16, 1)
		   RETURN 
		END 
go
lerieure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 17h03   #2
Membre Expert
 
Homme Etienne ZINZINDOHOUE
Ingénieur développement
Inscription : mars 2010
Messages : 1 138
Détails du profil
Informations personnelles :
Nom : Homme Etienne ZINZINDOHOUE
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2010
Messages : 1 138
Points : 2 466
Points : 2 466
Envoyer un message via Yahoo à zinzineti
Peux-tu poster le PRINT(@SQL) ?
__________________
Etienne ZINZINDOHOUE
Billets-Articles
zinzineti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 17h06   #3
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

Vous partez dans la mauvaise direction...

Vous ne pouvez spécifier dynamiquement le nom d'un objet dans un requete.

De plus, je pense que vous avez un problème de modélisation...

donnez nous la structure de vos tables, et expliquez-nous plus globalement ce que vous tentez de faire...
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 17h12   #4
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
Code sql :
1
2
 
SET @SQL=(SELECT @JOUR FROM CAL  INNER JOIN CAL_P ON CAL.CAL_P_ID=CAL_P.CAL_P_ID WHERE CAL_ID=1)

Quand vous faite cela, @JOUR n'est pas considéré comme un nom de colonne, mais comme une variable, et sa valeur est renvoyée (Sauf si aucune ligne ne rempli la condition de filtre, dans ce cas @SQL sera a NULL)

@zinzineti
PRINT(@SQL) doit afficher "LUNDI"
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/01/2011, 22h24   #5
Membre régulier
 
Olivier Albertini
Inscription : avril 2006
Messages : 194
Détails du profil
Informations personnelles :
Nom : Olivier Albertini

Informations forums :
Inscription : avril 2006
Messages : 194
Points : 77
Points : 77
Oui, c'est le cas il affiche "LUNDI" mais comment je peux faire pour @JOUR soit considéré comme un nom de colonne ?

j'ai CAL -> calendrier (CAL_ID, date de début, #CAL_P_ID,#CAL_TYPE_ID), CAL_P (lundi,mardi,mercredi,vendredi,samedi,dimanche,CAL_P_ID) -> Pondération des jours de mon calendrier, CAL_TYPE (CAL_TYPE_ID,LIBELLE) pour les types de calendrier (5jours, 3jours...)

Donc mon calendrier possède une pondération et un type.

j'ai une contrainte d'unicité sur le type du calendrier et la date de début.
La somme des pondérations de la date max d'une type calendrier doit être supérieur à zéro.

J'ai une table Task qui a #CAL_TYPE_ID, date de début, durée, une date de fin

Quand je saisie une tache je doit définir la date de fin en fonction de la durée et de la pondération du calendrier le lundi = 1 ou 0.5 ou 2 ... idem pour les autres jours de la semaine. Si la date de fin est spécifiée alors c'est un forçage... Si on saisit la date de fin et la durée mais pas la date de début alors c'est pour avoir les date au plus tard et c'est presque le même raisonnement que pour la date de début et la durée

Bien sûr une date de Task et une durée peut être à cheval sur plusieurs calendriers pour un TYPE renseigné lors de la saisie (Task qui a #CAL_TYPE_ID)

merci pour votre aide
lerieure est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h29.


 
 
 
 
Partenaires

Hébergement Web