IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

ASP.Net / C# / SQL Server :Exécuter une requête incluant une table temporaire


Sujet :

ASP.NET

  1. #1
    Membre à l'essai
    Profil pro
    Webmaster
    Inscrit en
    Septembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 8
    Points : 10
    Points
    10
    Par défaut ASP.Net / C# / SQL Server :Exécuter une requête incluant une table temporaire
    Bonjour.
    J'ai une requête un peu compliquée, je souhaite faire une première requête qui me retourne des résultats, puis, selon ces résultats, y ajouter d'autres résultats.
    Tout cela doit s'afficher dans un seul et unique gridview (pour conserver la largeur des colonnes et pouvoir trier les résultats, ...)

    Je m'explique :

    -- J'insère mes résultats dans ma table temporaire
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT *
    INTO #T
    FROM (
    	    SELECT *
                FROM matable T2
                WHERE -- mes conditions
    ) T2

    -- Je lis tous les résultats de la table temporaire

    -- J'y ajoute d'autres résultats, en fonction des lignes de la table temporaire
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    UNION
    SELECT *
    FROM  matable T2
    WHERE T2.id in
    	(
    	SELECT id
    	FROM  matable INNER JOIN
    	#T ON #T.idarticle = matable.id
    	)
    Je précise que ma requête est construite dynamiquement dans le code C# de ma page ASP.net :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
                string[] split = Txt_Recherche_modifie.Text.Split(new Char[] { ' ', ',', '.', ':', '\t' });
                string marequete = "SELECT *";
                marequete = marequete + " FROMmatable";
                marequete = marequete + " WHERE MARQUE is not null";
                foreach (string s in split)
                {
                    if (s.Trim() != "")
                        marequete = marequete + " AND (replace(modele,' ','') like '%" + s.Trim() + "%' OR marque like '%" + s.Trim() + "%')";
                }
                marequete = marequete + " ORDER BY Marque, Modele";
                if (Txt_Recherche.Text != "") {
                    MonSQL.SelectCommand = marequete ;
                }
    Je sais faire ça via une procédure stockée mais ça ne m'arrange absolument pas. J'ai bien la piste d'un Dataset ou Datareader mais je ne suis pas sur.
    Pouvez-vous m'aider svp? Merciiii

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Pourquoi ne pas utiliser une ou plusieurs Common Table Expression (CTE) pour préparer les résultats ? Par exemple :
    Code SQL : 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
    WITH
    	-- Recupere les enregistrements dont le nom commence par A
    	CTE1 (Id, Name)
    	AS
    		(SELECT Id
    			,Name
    		FROM MyTable
    		WHERE Name LIKE 'A%'),
    	-- Recupere les enregistrements de CTE1 dont le nom commence par AB
    	CTE2 (Id, Name)
    	AS
    		(SELECT Id, Name
    		FROM CTE1
    		WHERE Name LIKE 'AB%')
    SELECT * 
    FROM CTE2
    Dans cet exemple, CTE2 utilise ce qu'on a chargé dans CTE1...

    Si tu veux garder l'utilisation d'une table temporaire, il va falloir séparer en plusieurs requêtes (au moins 2, une pour charger la table temporaire, et une pour récupérer les infos), ou alors générer du T-SQL qui permet de pouvoir lancer plusieurs requêtes dans la même session, auquel cas il vaut mieux passer par une procédure stockée.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre à l'essai
    Profil pro
    Webmaster
    Inscrit en
    Septembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    Génial!
    Je ne connaissais pas le principe, je sens que ça va m'être très utile, merci beaucoup!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. composant login asp.net sans SQL server ?
    Par RiiiDD dans le forum ASP.NET
    Réponses: 1
    Dernier message: 02/10/2007, 01h38
  2. Problème connexion asp.net avec sql server 2000
    Par andres007 dans le forum ASP.NET
    Réponses: 5
    Dernier message: 29/06/2007, 14h30
  3. Saut de ligne en asp.net avec sql server 2000
    Par Pedro Varela dans le forum ASP.NET
    Réponses: 7
    Dernier message: 24/01/2007, 09h07
  4. [Sql Server 8.0]Requête dans une chaîne avec Cursor à executer
    Par Nicodemus dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/11/2006, 17h34
  5. [SQL Server] Limiter le resultat d'une requête
    Par obiwan dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 02/06/2004, 11h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo