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 :

Erreur et incomprehension d'une procedure stockée


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 472
    Points : 71
    Points
    71
    Par défaut Erreur et incomprehension d'une procedure stockée
    Bonjour,

    Suite à une erreur dans mon application VBA-Excel qui était :

    Cannot find either column "Project_PWA" or the user defined function or aggregate "Project_PWA.dbo.MSP_GET_Project" or name is ambiguous


    Quand j'ai débogué le curseur s'est mis sur cette ligne là dans mon code VBA :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rs = objDBHelper.RunSPReturnRS("usp_Extract_Activities", params
    )

    Je me suis donc rendu dans ma base de données sql server pour voir le contenu de ma procédure qui est :

    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
    48
    49
    50
    ALTER PROCEDURE [dbo].[usp_Extract_Activities]
    (
     @ProjectName NVARCHAR(MAX)
    )
    AS
    BEGIN
     
    	SET NOCOUNT ON
     
    	SELECT [Project_PWA].[dbo].[MSP_GET_Project] (p.[PROJ_UID], t.[TASK_UID]) AS [CodeProjet], 
    	T.[TASK_ID]
    	INTO #Temp
    	FROM [dbo].[MSP_ASSI]A
    	LEFT JOIN [dbo].[MSP_PROJECTS]P ON A.[PROJ_UID]=P.[PROJ_UID]
    	LEFT JOIN [dbo].[MSP_TASKS]T ON A.[TASK_UID]=T.[TASK_UID]
    	LEFT JOIN [dbo].[MSP_RES]R ON A.[RES_UID]=R.[RES_UID]
    	LEFT JOIN [dbo].[MSP_RES_CUST_VALUES]B ON A.[RES_UID]=B.[RES_UID]
    	LEFT JOIN [dbo].[MSP_CUSTOM_F]C ON B.[MD_PROP_ID]=C.[MD_PROP_ID]
    	LEFT JOIN [dbo].[MSP_LOOKUP]D ON B.[CODE_VALUE]= D.[LT_STRUCT_UID]
    	WHERE	p.[PROJ_NAME] =@ProjectName AND
    			D.LT_VALUE_TEXT IS NOT NULL
     
    	--DEBUT - Il faut afficher les projets dans l'ordre de création des tâches
    	SELECT DISTINCT [CodeProjet], 
    	CASE WHEN CHARINDEX('#', [CodeProjet]) > 0 THEN 
    		LEFT([CodeProjet], CHARINDEX('#', [CodeProjet]) - 1)
    	ELSE 
    		CASE WHEN CHARINDEX('-', [CodeProjet]) > 0 THEN 
    			LEFT([CodeProjet], CHARINDEX('-', [CodeProjet]) - 1)
    		ELSE 
    			[CodeProjet]
    		END
    	END AS [CodeOnly],
    	[TASK_ID]
    	INTO #Results
    	FROM #Temp
    	WHERE [CodeProjet] IS NOT NULL
     
    	SELECT [CodeProjet] 
    	FROM (
    		SELECT [CodeProjet], [CodeOnly], MIN([TASK_ID]) as [TASK_ID]
    		FROM #Results
    		GROUP BY [CodeOnly], [CodeProjet] 
    	) o
    	ORDER BY [TASK_ID] ASC
    	--FIN - Il faut afficher les projets dans l'ordre de création des tâches
     
    	DROP TABLE #Results
    	DROP TABLE #Temp
    END
    Je n'ai pas très bien compris la procédure est ce que "MSP_GET_Project" est une fonction ou une view ? " je ne la trouve pas dans mes fonctions ni mes views"

    Quelqu'un pourrait m'expliquer le code pour essayer de résoudre le problème?
    Avez vous une idée sur ce qui cloche ?

    Merci

    PS: Je travaille sur une grosse base de données qui a été développe par une autre personne ce qui explique ma difficulté de comprendre ^^

  2. #2
    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

    Visiblement, [Project_PWA].[dbo].[MSP_GET_Project] est une fonction scalaire qui renvoi le code d'un projet en fonction d'un PROJ_UID et d'un TASK_UID.

    Peut être ne la trouvez vous pas (et ne pouvez l’exécuter) car il vous manque des privilèges

  3. #3
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Points : 1 049
    Points
    1 049
    Par défaut
    [Project_PWA].[dbo].[MSP_GET_Project] (p.[PROJ_UID], t.[TASK_UID]) semble être une fonction de la base de données Project_PWA. Est ce que cette base est sur la même instance que la procédures stockée ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 472
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Bonjour

    Visiblement, [Project_PWA].[dbo].[MSP_GET_Project] est une fonction scalaire qui renvoi le code d'un projet en fonction d'un PROJ_UID et d'un TASK_UID.

    Peut être ne la trouvez vous pas (et ne pouvez l’exécuter) car il vous manque des privilèges
    Bonjour,

    Merci pour ta réponse mais comment je pourrez savoir si il me manque des privilèges ou pas ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 472
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par darkelend Voir le message
    [Project_PWA].[dbo].[MSP_GET_Project] (p.[PROJ_UID], t.[TASK_UID]) semble être une fonction de la base de données Project_PWA. Est ce que cette base est sur la même instance que la procédures stockée ?
    Bonjour et merci pour ta réponse,

    Au fait au début j'avais pas de problème en particulier avec l'application donc l'appel à la procedure stockée ce faisait sans soucis.

    Mais un certain moment j'ai eu ce message d'erreur là.

    Mais sinon oui la base de données et la procédure stockée ont la même instance.

  6. #6
    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
    Citation Envoyé par sab_info Voir le message
    Bonjour,

    Merci pour ta réponse mais comment je pourrez savoir si il me manque des privilèges ou pas ?
    Connectez vous sur la base [Project_PWA] avec un compte admin, et regardez si vous voyez la fonction en question.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 472
    Points : 71
    Points
    71
    Par défaut
    Euhh quand je me connecte à la base de données j'utilise l'authentification Windows.

    J'ai pas vraiment un compte en particulier.

    Sinon je ne pense pas que ça doit être ça le problème car j'avais pas cette erreur là au début je viens de rencontrer ce problème là.

    Merci

  8. #8
    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
    Citation Envoyé par sab_info Voir le message
    Sinon je ne pense pas que ça doit être ça le problème car j'avais pas cette erreur là au début je viens de rencontrer ce problème là.
    Merci
    C'est donc bien qu'il s'est passé quelque chose !
    La fonction a peut-être été supprimée.
    Ou elle a peut-être été supprimée, puis recréée, mais les privilèges qui vous sont nécessaires n'ont pas été réattribués.

    Donc soit vous pouvez obtenir un compte admin sur la base Project_PWA pour vérifier par vous même, soit vous demandez au DBA de Project_PWA où est passée la fonction...

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 472
    Points : 71
    Points
    71
    Par défaut
    Oui tout à fait c'est ce que j'ai pensé aussi , la fonction a disparu et j'ai demandé un back up de la base de données mais le dernier back up en question était un peu récent donc je n'ai pu récupérer la fonction.

    En plus vu le code je savais pas si c'était vraiment une fonction ou une vue ou même une table.

    Est ce qu'il y a moyen de recréer cette fonction là en analysant la procédure stockée ? " c'est ce que je suis entrain de faire mais c'est assez dur "

    Merci

  10. #10
    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
    n'avez vous pas de sauvegarde plus ancienne ?

    prenez contact avec le responsable de cette base. La fonction ne s'est pas envolée toute seule...

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 472
    Points : 71
    Points
    71
    Par défaut
    Oui c'est étrange et je galère parce que je dois faire tourner une application.

    J'ai contacté l'administrateur et il avait les back up des deux dernières semaines et dans le back up le plus ancien je n'ai pas trouvé la fonction

  12. #12
    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
    Votre application n'a pas tourné ces deux dernières semaines ?

    N'y aurait-il pas une vieille sauvegarde qui "traine" dans un coin ? ou les sources SQL archivées à un endroit ?

    Sans ça en effet, il ne vous reste plus qu'a réécrire la fonction !

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 472
    Points : 71
    Points
    71
    Par défaut
    Oui effectivement je dois la réécrire mais ça va être un peu difficile .

    Sinon à quoi correspond cette partie là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT [Project_PWA].[dbo].[MSP_GET_Project] (p.[PROJ_UID], t.[TASK_UID]) AS [CodeProjet], 
        T.[TASK_ID]
    Il devrait normalement avoir une sélection sur la fonction vu qu'elle retourne un tableau donc logiquement on aura un select nom_champ nom_fonction

    En plus on a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     (p.[PROJ_UID], t.[TASK_UID]) AS [CodeProjet]
    Les alias p et t sont pas définis dans la procédure et je ne sais pas s'il doivent être présent dans la fonction.

    Une remarque aussi pour la table temporaire qui n'est pas définie dans la procédure est ce que c'est normal ça ?

    Merci

  14. #14
    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
    Citation Envoyé par sab_info Voir le message
    Sinon à quoi correspond cette partie là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT [Project_PWA].[dbo].[MSP_GET_Project] (p.[PROJ_UID], t.[TASK_UID]) AS [CodeProjet], 
    	T.[TASK_ID]
    Il devrait normalement avoir une sélection sur la fonction vu qu'elle retourne un tableau donc logiquement on aura un select nom_champ nom_fonction
    Non, a priori elle retourne un scalaire : le code projet (pour les paramètres spécifiés)

    Citation Envoyé par sab_info Voir le message
    En plus on a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     (p.[PROJ_UID], t.[TASK_UID]) AS [CodeProjet]
    Les alias p et t sont pas définis dans la procédure et je ne sais pas s'il doivent être présent dans la fonction.
    Si ils sont présents, mais ne respectent pas la casse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LEFT JOIN [dbo].[MSP_PROJECTS]P ON A.[PROJ_UID]=P.[PROJ_UID]
    	LEFT JOIN [dbo].[MSP_TASKS]T ON A.[TASK_UID]=T.[TASK_UID]
    Citation Envoyé par sab_info Voir le message
    Une remarque aussi pour la table temporaire qui n'est pas définie dans la procédure est ce que c'est normal ça ?

    Merci
    Oui, c'est normal, elle est créée par la commande SELECT ... INTO...

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 472
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Non, a priori elle retourne un scalaire : le code projet (pour les paramètres spécifiés)
    Merci pour ton aide.

    Au fait je n'arrive pas à comprendre les paramètres de la selection :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT [Project_PWA].[dbo].[MSP_GET_Project] (p.[PROJ_UID], t.[TASK_UID]) AS [CodeProjet], 
    	T.[TASK_ID]
    Pourquoi ils sont représenté comme ça ? et au niveau de la fonction ils devraient être représentés comment ?

    Merci

  16. #16
    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
    je ne comprend pas trop la question, je vais peut etre répondre à coé de la plaque mais :

    tu peux faire cette selection
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT p.PROJ_UID
            , t.TASK_UID, 
    	T.TASK_ID
    ...
    sauf qu’apparemment, il te faut le code projet (qui ne doit pas être disponible dans les tables de la requête), mais qui peut être déduit des valeurs PROJ_UID et TASK_UID grace à la fonction disparue. Il faut donc appeler cette fonction pour chaque ligne du résultat...

    si on découpe le début de la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT 
        [Project_PWA]        --nom de la base qui contient la fonction
        .[dbo]                   -- nom du schéma qui contient la fonction
        .[MSP_GET_Project] (-- la fonction !
            p.[PROJ_UID],     --premier parametre de la fonction
            t.[TASK_UID]      -- deuxieme parametre de la fonction
        ) AS [CodeProjet],   --Alias pour la colonne qui contient le résultat de la fonction
        T.[TASK_ID]       -- deuxieme colonne du select

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 472
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    je ne comprend pas trop la question, je vais peut etre répondre à coé de la plaque mais :
    Je te remercie beaucoup pour ton aide, tes réponses m'aident beaucoup

    Donc en gros la fonction doit me retourner juste un code qui va être construit à partir de ces deux champs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p.[PROJ_UID], t.[TASK_UID]

  18. #18
    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
    Citation Envoyé par sab_info Voir le message
    Donc en gros la fonction doit me retourner juste un code qui va être construit à partir de ces deux champs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p.[PROJ_UID], t.[TASK_UID]
    c'est ça

    Enfin, "construit"... je dirai plutôt "retrouvé", certainement par un select dans la ou les tables qui vont bien...

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 472
    Points : 71
    Points
    71
    Par défaut
    Si c'était une simple sélection je pense que y a pas besoin de créer une fonction pour le faire.

    Le truc qui me fait peur c'est que y a surement des critères ou un traitement à faire.

    Je vais essayer de créer une fonction pour tester ^^

Discussions similaires

  1. Erreur 1292 à l'exécution d'une procedure stockée
    Par pbatty1 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 04/01/2012, 19h18
  2. Erreur 450 avec une procedure stockée : Access/VB6
    Par poissonsoluble dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 30/05/2007, 10h14
  3. vue a partir d'une procedure stocké
    Par coucoucmoi dans le forum SQL
    Réponses: 6
    Dernier message: 07/08/2003, 16h03
  4. Ecriture d'une procedure stockée XP
    Par WOLO Laurent dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/07/2003, 13h09
  5. Appel a une procedure stockée en vba
    Par The_Nail dans le forum VBA Access
    Réponses: 36
    Dernier message: 01/04/2003, 16h44

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