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

MS SQL Server Discussion :

Equivalent de WITH ORACLE en SQL Server


Sujet :

MS SQL Server

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Points : 357
    Points
    357
    Par défaut Equivalent de WITH ORACLE en SQL Server
    Bonjour,

    Je cherche un équivalent du WITH ORACLE en SQL Server?

    (WITH existe en SQL Server mais n'a pas du tout le même intérêt)
    Arrêtez de poster des liens! Expliquez! (ça évite les erreur HTTP 404)

    L'homme est plus fort que la machine... ne renoncez jamais


  2. #2
    Expert éminent
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Points : 6 775
    Points
    6 775
    Billets dans le blog
    4
    Par défaut
    que fait la fonction WITH sous Oracle? (je ne m'en rappel pas )
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Points : 357
    Points
    357
    Par défaut
    En gros cela revient à créer des tables temporaires... sauf qu'il ne pollue pas la session utilisateur avec des tables temporaires
    Arrêtez de poster des liens! Expliquez! (ça évite les erreur HTTP 404)

    L'homme est plus fort que la machine... ne renoncez jamais


  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 837
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 837
    Points : 52 922
    Points
    52 922
    Billets dans le blog
    5
    Par défaut
    Cela fait partie de la norme SQL:1999 et s'appelle la Common Table Expression (CTE). C'est parfaitement implémenté dans SQL Server depuis la version 2005, c'est à dire avant l'implémentation sous Oracle !!!

    Lisez l'article que j'ai écrit à ce sujet :
    http://sqlpro.developpez.com/cours/s...te-recursives/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Points : 357
    Points
    357
    Par défaut
    Merci beaucoup pour l'article!

    En fait la syntaxe est légèrement différente mais le concept est le mm! voilà qui devrait grandement m'aider à optimiser bon nombre de requêtes!

    Arrêtez de poster des liens! Expliquez! (ça évite les erreur HTTP 404)

    L'homme est plus fort que la machine... ne renoncez jamais


  6. #6
    Membre averti Avatar de voran
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 242
    Points : 346
    Points
    346
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Cela fait partie de la norme SQL:1999 et s'appelle la Common Table Expression (CTE). C'est parfaitement implémenté dans SQL Server depuis la version 2005, c'est à dire avant l'implémentation sous Oracle !!!
    ???
    C'est implémenté dans oracle depuis la 9i release 2 qui, aux dernières nouvelles, n'est pas sortie après sql server 2005 !

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 837
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 837
    Points : 52 922
    Points
    52 922
    Billets dans le blog
    5
    Par défaut
    9i tu es sûr ??? Parce que dans mes souvenirs ce n'étais même pas dans la v10g à sa sortie...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  8. #8
    Membre averti Avatar de voran
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 242
    Points : 346
    Points
    346
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    9i tu es sûr ??? Parce que dans mes souvenirs ce n'étais même pas dans la v10g à sa sortie...

    A +
    ha ?
    on ne parle peut-être pas de la même chose alors ?

    http://download.oracle.com/docs/cd/B...9ir1.htm#70695

    ou encore ceci :

    http://www.oracle.com/technology/pro...ily/oct10.html

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 837
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 837
    Points : 52 922
    Points
    52 922
    Billets dans le blog
    5
    Par défaut
    Ce WITH est effectivement une version incomplète ne gérant apparemment pas la récursivité. Or l'intérêt principal du WITH est d'introduire la récursivité des requête afin d'effectuer des parcours d'arbres et de graphes tel que la norme SQL l'a prévue. Or ce ne semble pas être du tout le cas de ce WITH d'Oracle dans la version que tu as mentionné !

    Lisez l'article que j'ai écrit à ce sujet : http://sqlpro.developpez.com/cours/s...te-recursives/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  10. #10
    Membre averti Avatar de voran
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 242
    Points : 346
    Points
    346
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Ce WITH est effectivement une version incomplète ne gérant apparemment pas la récursivité. Or l'intérêt principal du WITH est d'introduire la récursivité des requête afin d'effectuer des parcours d'arbres et de graphes tel que la norme SQL l'a prévue. Or ce ne semble pas être du tout le cas de ce WITH d'Oracle dans la version que tu as mentionné !

    Lisez l'article que j'ai écrit à ce sujet : http://sqlpro.developpez.com/cours/s...te-recursives/

    A +
    N'empêche que cela n'est pas comme tu l'annoncais au départ.
    Car au contraire, oracle l'a implémenté avant microsoft.
    Sais tu où en est oracle sur ce point désormais ?

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Points : 357
    Points
    357
    Par défaut
    Je viens donc d'implémenter mon premier WITH

    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
    17
    18
    19
    20
    21
    22
    23
    24
     
     
    WITH 
       doublon (num_voie, type_voie, adresse1, adresse2, cp, commune, nb)
       AS 
         (
    	SELECT ca.num_voie,ca.type_voie,ca.adresse1, ca.adresse2,pcp.cp,pcp.commune, count(*) as nb
    	FROM client_adresse ca
    	LEFT OUTER JOIN param_code_postal pcp ON pcp.id_cp = ca.id_cp 
    	WHERE pcp.cp <> '00000' AND ca.id_type_adresse = 1
    	GROUP BY ca.num_voie,ca.type_voie,ca.adresse1, ca.adresse2,pcp.cp,pcp.commune
    	HAVING count(*) > 1
    	--ORDER BY pcp.cp,pcp.commune,ca.type_voie,ca.adresse1, ca.adresse2	
    )
    SELECT client.id_client 
    FROM   client
    INNER JOIN client_adresse ON client_adresse.id_client = client.id_client 
    	AND client_adresse.id_type_adresse = 1
    INNER JOIN doublon ON client_adresse.num_voie = doublon.num_voie
    	AND client_adresse.type_voie = doublon.type_voie
    	AND client_adresse.adresse1 = doublon.adresse1
    	AND client_adresse.adresse2 = doublon.adresse2
    	AND client_adresse.cp = doublon.cp
    	AND client_adresse.commune = doublon.commune

    Mais j'ai l'erreur SQL suivante :

    Msg*156, Niveau*15, État*1, Ligne*1
    Syntaxe incorrecte vers le mot clé 'WITH'.

    Et je ne voie vraiment pas pourquoi... une idée?
    Arrêtez de poster des liens! Expliquez! (ça évite les erreur HTTP 404)

    L'homme est plus fort que la machine... ne renoncez jamais


  12. #12
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 837
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 837
    Points : 52 922
    Points
    52 922
    Billets dans le blog
    5
    Par défaut
    Mettez un point virgule sur la ligne qui précède le WITH.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Equivalent fonctions lead (ORACLE) pour SQL SERVER
    Par oOBaalberithOo dans le forum Développement
    Réponses: 7
    Dernier message: 06/06/2012, 11h11
  2. Equivalence entre Oracle et Sql Server
    Par sfaxi dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 17/01/2007, 09h27
  3. Equivalent de la fonction NVL sous oracle en SQL-server
    Par MorbidAngel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/09/2005, 10h50
  4. Lien entre oracle et SQL Server 2000
    Par alpachico dans le forum Décisions SGBD
    Réponses: 14
    Dernier message: 15/06/2005, 14h14
  5. Migration de données Oracle vers SQL server
    Par joul's dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 16/02/2005, 15h05

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