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 06/01/2011, 13h46   #1
Invité régulier
 
Inscription : novembre 2010
Messages : 46
Détails du profil
Informations personnelles :
Localisation : Côte d'Ivoire

Informations forums :
Inscription : novembre 2010
Messages : 46
Points : 6
Points : 6
Par défaut Aidez moi à créer une vue

Bonjour à tous,

Depuis hier je m’évertue à mettre en place une procédures stockées qui me tient encore en échec.
J'ai deux tables reliées par un champ Num_ordr_PAX que j'arrive à decomposé en 2 données avec ces 2 selects
Code :
1
2
(la date=SELECT rtrim(substring(cod_assist_INAD,8,10))FROM T_INAD;
 le cod_vol=SELECT rtrim(substring(cod_assist_INAD,0,7))FROM T_INAD).
Il y a aussi cette jointure:

Code :
SELECT a.Num_ordr_PAX,a.PAX_name,a.Num_Passport,a.desti_finale,a.Observ_PAX,b.Vols_INAD,b.Motifs FROM T_PAX AS  a JOIN T_INAD  b ON a.Num_ordr_PAX=b.Num_ordr_PAX stance
Je voudrais joindre cette jointure à ces 2 select pour en faire une vue où le champ cod_assist_INAD sera en paramètre d’entrée.

Prière de m'aider.
Alexandre le Grand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2011, 15h27   #2
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 665
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 665
Points : 8 707
Points : 8 707
Bonjour,

Vous confondez ce qu'est une vue et ce qu'est une procédure stockée.

Une vue vous retournera un ensemble de lignes basé sur une requête de type SELECT.
Elle n'a aucune existence physique sauf si elle est indexée, et elle n'est pas paramétrable.
En revanche on peut toujours la filtrer comme toute autre table, à l'aide de la clause WHERE.
Enfin une vue retourne toujours un ensemble de lignes (notez que celui-ci peut être vide )

Une procédure stockée est une suite d'instructions à exécuter, qui peut ou non :
- retourner un ensemble de lignes
- prendre des paramètres en entrée
- affecter des valeurs à des paramètres de sortie (clause OUTPUT des paramètres)

Dans les deux cas, le plan d'exécution est stocké dans le cache de procédures.

Citation:
'ai deux tables reliées par un champ Num_ordr_PAX que j'arrive à decomposé en 2 données avec ces 2 selects(la date=select rtrim(substring(cod_assist_INAD,8,10))from T_INAD;
le cod_vol=select rtrim(substring(cod_assist_INAD,0,7))from T_INAD).
Dans une table il y a des colonnes, dans un fichier il y a des champs.
J'explique ici la différence. Cela peut vous paraître équivalent à chercher des poils sur les œufs, pourtant la différence est non négligeable.

Ensuite la conception de votre table est fausse puisqu'elle ne respecte pas la première forme normale, selon laquelle les valeurs stockées dans les colonnes doivent être atomiques (insécables si vous préférez).J'espère donc qu'il s'agit d'une table dont vous vous servez pour réaliser des imports de données

Vous pouvez créer des colonnes calculées (et éventuellement indexées) qui extraient automatiquement les valeurs comme vous le spécifiez dans des colonnes de la table.
Si vous avez une procédure d'import, alors l'extraction de telles valeurs devrait être fait dans cette procédure.

Dans l'état actuel des choses, si j'ai bien compris, votre procédure stockée devrait être :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CREATE PROCEDURE prc_maProcedure
	@_cod_assist_INAD varchar(x)
AS
BEGIN
	SET NOCOUNT ON
 
	SELECT		a.Num_ordr_PAX
			, a.PAX_name
			, a.Num_Passport
			, a.desti_finale
			, a.Observ_PAX
			, b.Vols_INAD
			, b.Motifs
			, RTRIM(SUBSTRING(b.cod_assist_INAD, 8, 10)) AS la_date
			, RTRIM(substring(b.cod_assist_INAD,0,7)) AS cod_vol
	FROM		dbo.T_PAX AS a
	INNER JOIN	dbo.T_INAD b
				ON a.Num_ordr_PAX = b.Num_ordr_PAX
	WHERE		b.cod_assist_INAD = @_cod_assist_INAD
END
Vous devez remplacer le "x" de "@_cod_assist_INAD varchar(x)" par la largeur de la colonne cod_assist_INAD.

N'oubliez jamais de qualifier les objets que vous utilisez par le nom du schéma auquel ils appartiennent.
Par défaut c'est dbo, et si vous le précisez, cela évite à SQL Server de le rechercher dans les tables de méta-données

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2011, 13h20   #3
Invité régulier
 
Inscription : novembre 2010
Messages : 46
Détails du profil
Informations personnelles :
Localisation : Côte d'Ivoire

Informations forums :
Inscription : novembre 2010
Messages : 46
Points : 6
Points : 6
Merci pour ton conseil et ton aide. Tu as vu juste, j'ai confondu une vue et une procédures stockée. Merci pour ton aide.
Alexandre le Grand 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 13h29.


 
 
 
 
Partenaires

Hébergement Web