Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Outils
Outils Forum d'entraide sur les outils gravitant autour de MS-SQL Server, tels que bcp, TDS, ...
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 03/05/2006, 21h21   #1
Futur Membre du Club
 
Inscription : mars 2006
Messages : 55
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 55
Points : 19
Points : 19
Par défaut SQL SERVER 2005 -- requête récursive avec bcp données

Bonjour,

J'utilise présentement un requête récursive qui me permet d'obtenir le chemin que peut prendre un élément de ma base de donnée.

Ceci fonctionne très bien lorsque j'ai peu d'éléments (environ 50) dans ma base de données, cependant, lorsque j'en ai plusieurs (environ 400), ma requête récursive ne semble pas être capable de se terminer...

Alors, je me demandais si c'était mieux d'avoir une requête récursive, ou s'il y avait un autre moyen qui serait plus approprié lorsque l'on a beaucoup de données.

De plus, j'aimerais savoir s'il est possible de voir se qu'effectue la requête à chaque tour.

Voici le code de ma requête récursive :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

WITH Peres (Pere, Chemin, Longueur) 
AS
(SELECT distinctcast(no_elem_fils aschar(5)),cast(@NoElement as varchar(MAX)),cast(0 asbigint)
FROM Preseances
where no_elem_fils = @NoElement

UNION ALL

SELECT cast(no_elem_pere aschar(5)), departure.Chemin + no_elem_pere,
Len(departure.Chemin + no_elem_pere)
FROM Preseances AS arrival
INNER JOIN Peres AS departure
ON departure.Pere = arrival.no_elem_fils
WHERE departure.Chemin NOT LIKE '%'+ arrival.no_elem_pere +'%'),
MChemin (Longueur)
 

AS 
(SELECT MAX(Longueur) FROM Peres)
J'avoue que je n'aime pas trop ma requête car ce que je fais, je crée une liste des éléments qui forme le chemin. Par la suite, j'obtiens sa longueur et divise par la longueur du champ (5). Ce qui me donne en fait le nombre d'éléments par lequel l'élément courant (@NoElement) a passé.

Merci,

Évans
evans est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2006, 15h06   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
J'ai ecrit un très long article sur toutes les facettes des requêtes récusrsives SQL Server 2005.
Vous pouvez le lire en version US à :
http://www.sqlservercentral.com/colu...server2005.asp
Ou en français dans SQL Server magazine d'octobre 2005.

En résumé si votre modèle est arborescent, préférez la représentation intervallaire :
http://sqlpro.developpez.com/cours/arborescence/

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2006, 15h19   #3
Futur Membre du Club
 
Inscription : mars 2006
Messages : 55
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 55
Points : 19
Points : 19
Bonjour,

Merci pour cet article, il est super bien fait.

Cependant, si j'utilise l'arborescence, dans mon cas, mon arbre se termine toujours par un seul élément. Est-ce que ceci pourrait causer problème, car c'est comme si c'était de racine à racine non ?

Merci,

Évans
evans est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2006, 18h17   #4
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
Si C'est bien un arbdre (ou un multi arbre) pas de problème. En revanche ce modèle ne marche pas avec un graphe.

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2006, 19h01   #5
Futur Membre du Club
 
Inscription : mars 2006
Messages : 55
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 55
Points : 19
Points : 19
Bonjour,

Finalement, j'ai fait des procédures stockées qui parcourent mes éléments. Ceci fonctionne très bien maintenant.

Merci pour l'information et les liens,

Évans
evans 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 15h19.


 
 
 
 
Partenaires

Hébergement Web