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

Développement SQL Server Discussion :

Invalid object name


Sujet :

Développement SQL Server

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 241
    Points : 204
    Points
    204
    Par défaut Invalid object name
    Bonjour à tous;
    en fait j'ai tenté de faire un appel à une fonction dans une autre fonction comme suit
    Code : 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
    CREATE FUNCTION acReliquat3 (@TYPE int) RETURNS TABLE
    AS
    RETURN
     
    SELECT [dbo].[AcReliquat2](@TYPE).CleProduit, acProduit.Designation, 
    Sum([dbo].[AcReliquat2](@TYPE).SumQteLiee) AS SumQtesLiee, 
    Sum([dbo].[AcReliquat2](@TYPE).PremierDeQuantite) AS SumQteSource, 
    Sum([dbo].[AcReliquat2](@TYPE).PUNetHTS) AS PUNetsHTS, 
    Sum([dbo].[AcReliquat2](@TYPE).PrixNetTTCS) AS PUNetsTTCS, 
    Sum([dbo].[AcReliquat2](@TYPE).PUNetHTD) AS PUNetsHTD, 
    Sum([dbo].[AcReliquat2](@TYPE).PUNetTTCD) AS PUNetsTTCD, acTiers.TiersRaisonSociale AS TiersRaisonSocialeS, 
    acProduit.Code AS CodeProduit, acProduit.Reference AS ReferenceProduit, acProduit.Designation2, 
    acProduit.Produit.Quantite AS QteProduit, acProduit.FamilleArticle, acProduit.Emplacement, acProduit.StatutLot, 
    acProduit.Marque, acProduit.CategorieProduit, ([SumQtesLiee]-[SumQteSource])*-1 AS Ecart, [PUNetsHTS]-[PUNetsHTD] AS EcartHT, 
    [PUNetsTTCS]-[PUNetsTTCD] AS EcartTTC, ([SumQtesLiee]*100)/[SumQteSource] AS Realispour
    FROM (([dbo].[AcReliquat2](@TYPE) LEFT JOIN acProduit ON [dbo].[AcReliquat2](@TYPE).CleProduit = acProduit.CleProduit) LEFT JOIN acEffet ON [dbo].[AcReliquat2](@TYPE).CleEffetS = acEffet.CleEffet) LEFT JOIN acTiers ON acEffet.CleTiers = acTiers.CleTiers
    GROUP BY [dbo].[AcReliquat2](@TYPE).CleProduit, acProduit.Designation, acTiers.TiersRaisonSociale, acProduit.Code, acProduit.Reference, acProduit.Designation2, acProduit.Produit.Quantite, acProduit.FamilleArticle, acProduit.Emplacement, acProduit.StatutLot, acProduit.Marque, acProduit.CategorieProduit, acEffet.Code;
    GO
    mais j'ai l'erreur suivante :
    Invalid object name 'dbo.AcReliquat2'.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 902
    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 902
    Points : 51 646
    Points
    51 646
    Billets dans le blog
    6
    Par défaut
    Utilisez des alias. Virez les parenthèses inutiles.
    A +

  3. #3
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    bonjour,

    Utilises un alias pour ta fonction table AcReliquat2 :

    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
     
    CREATE FUNCTION acReliquat3 (@TYPE int) RETURNS TABLE
    AS
    RETURN
     
    SELECT AcReliquat2.CleProduit, acProduit.Designation, 
    Sum(AcReliquat2.SumQteLiee) AS SumQtesLiee, 
    Sum(AcReliquat2.PremierDeQuantite) AS SumQteSource, 
    Sum(AcReliquat2.PUNetHTS) AS PUNetsHTS, 
    Sum(AcReliquat2.PrixNetTTCS) AS PUNetsTTCS, 
    Sum(AcReliquat2.PUNetHTD) AS PUNetsHTD, 
    Sum(AcReliquat2.PUNetTTCD) AS PUNetsTTCD, acTiers.TiersRaisonSociale AS TiersRaisonSocialeS, 
    acProduit.Code AS CodeProduit, acProduit.Reference AS ReferenceProduit, acProduit.Designation2, 
    acProduit.Produit.Quantite AS QteProduit, acProduit.FamilleArticle, acProduit.Emplacement, acProduit.StatutLot, 
    acProduit.Marque, acProduit.CategorieProduit, ([SumQtesLiee]-[SumQteSource])*-1 AS Ecart, [PUNetsHTS]-[PUNetsHTD] AS EcartHT, 
    [PUNetsTTCS]-[PUNetsTTCD] AS EcartTTC, ([SumQtesLiee]*100)/[SumQteSource] AS Realispour
    FROM (([dbo].[AcReliquat2](@TYPE)  AS AcReliquat2 LEFT JOIN acProduit ON AcReliquat2.CleProduit = acProduit.CleProduit) LEFT JOIN acEffet ON AcReliquat2.CleEffetS = acEffet.CleEffet) LEFT JOIN acTiers ON acEffet.CleTiers = acTiers.CleTiers
    GROUP BY AcReliquat2.CleProduit, acProduit.Designation, acTiers.TiersRaisonSociale, acProduit.Code, acProduit.Reference, acProduit.Designation2, acProduit.Produit.Quantite, acProduit.FamilleArticle, acProduit.Emplacement, acProduit.StatutLot, acProduit.Marque, acProduit.CategorieProduit, acEffet.Code;
    GO

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    J'ai rarement vu une requête aussi moche et fausse.

    - Les parenthèses inutiles sont ... inutiles et pourrissent la lisibilité du code
    - le code n'est pas indenté
    - les tables ne sont ni qualifiées, ni aliasées
    - les alias de colonnes sont utilisés comme colonnes (PUNetsHTS n'est pas une colonne mais un alias, dès lors tout "calcul" est impossible)
    - il y a des jointures entre des fonctions tables qui spécifient le paramètre

    Ce qui fait que l'on peut réécrire votre fonction comme suit :

    Code : 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    CREATE FUNCTION acReliquat3
    	(@TYPE int)
    RETURNS TABLE
    AS
    RETURN 
    SELECT		R2.CleProduit
    		, P.Designation
    		, SUM(R2.SumQteLiee) AS SumQtesLiee
    		, SUM(R2.PremierDeQuantite) AS SumQteSource
    		, SUM(R2.PUNetHTS) AS PUNetsHTS
    		, SUM(R2.PrixNetTTCS) AS PUNetsTTCS
    		, SUM(R2.PUNetHTD) AS PUNetsHTD
    		, SUM(R2.PUNetTTCD) AS PUNetsTTCD
    		, T.TiersRaisonSociale AS TiersRaisonSocialeS
    		, P.Code AS CodeProduit
    		, P.Reference AS ReferenceProduit
    		, P.Designation2
    		, P.Quantite AS QteProduit
    		, P.FamilleArticle
    		, P.Emplacement
    		, P.StatutLot
    		, P.Marque
    		, P.CategorieProduit
    		, (SUM(R2.SumQteLiee) - SUM(R2.PremierDeQuantite)) * -1 AS Ecart
    		, SUM(R2.PUNetHTS) - SUM(R2.PUNetHTD) AS EcartHT
    		, SUM(R2.PrixNetTTCS) - SUM(R2.PUNetTTCD) AS EcartTTC
    		, (SUM(R2.SumQteLiee) * 100) / SUM(R2.PremierDeQuantite) AS Realispour
    FROM 		dbo.AcReliquat2(@TYPE) AS R2
    LEFT JOIN	dbo.acProduit AS P
    			ON R2.CleProduit = P.CleProduit
    LEFT JOIN	dbo.acEffet AS E
    			ON R2.CleEffetS = E.CleEffet
    LEFT JOIN	dbo.acTiers AS T
    			ON E.CleTiers = T.CleTiers
    GROUP BY	R2.CleProduit
    		, P.Designation
    		, T.TiersRaisonSociale
    		, P.Code
    		, P.Reference
    		, P.Designation2
    		, P.Quantite
    		, P.FamilleArticle
    		, P.Emplacement
    		, P.StatutLot
    		, P.Marque
    		, P.CategorieProduit
    		, E.Code
    Avouez que c'est quand même un peu plus lisible
    Les 4 dernières lignes du SELECT sont à mon sens inutiles et peuvent être calculées côté applicatif.

    En outre, vous semblez confondre ce qu'est une fonction et une procédure.
    D'autre part les fonctions définies par l'utilisateur sont connues sous SQL Server pour être contre-performantes plus que pour être utiles.
    Essayez donc de remplacer le code de vos fonctions par des procédures.
    Il semble que vous codiez en cherchant à faire du ligne à ligne, ce pour quoi un SGBDR SQL n'est pas conçu : il traite les données dans leur ensemble, et c'est ce qui fait que l'accès aux données dans les bases de données modernes est très rapide ... à condition d'avoir un bon modèle de données et d'être scrupuleux dans l'écriture du code

    @++

  5. #5
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 241
    Points : 204
    Points
    204
    Par défaut
    Bonjour;
    Merci infiniment elsuket, en fait pour le code c'était pas le mien c'est des requêtes MS Access dont je dois faire la traduction mais bon j'aurais dû faire mieux

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

Discussions similaires

  1. Invalid object name
    Par YEMLONG dans le forum Administration
    Réponses: 1
    Dernier message: 10/06/2009, 10h42
  2. invalid object name
    Par anna1980 dans le forum MySQL
    Réponses: 10
    Dernier message: 16/10/2008, 15h41
  3. Erreur : Invalid Object Name
    Par javaboy dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/03/2008, 14h13
  4. [SQL-Server] Invalid object name
    Par Anthony.Desvernois dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 13/07/2007, 12h47
  5. invalid object name
    Par Dnx dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/10/2005, 10h42

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