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 exécution d'une procédure 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 exécution d'une procédure stockée
    Bonsoir à tous,

    J'ai un petit souci quand j'exécute ma procédure stockée j'ai ce message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32).
    J'ai eu ce message d'erreur après avoir modifié mon code au niveau d'une clause where, j'ai remis le code comme il était avant mais ça ne marchait pas et j'ai eu le message d'erreur.

    Mon code était comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    UPDATE #Temp
        SET [RNotes] = (   
                            SELECT TOP 1 1
                            FROM #Temp t2
                            WHERE    [Notes] IS NOT NULL AND
                                    [DisplayOrder] = 2 AND
                                    t2.[Sequence] = t.[Sequence]
                        )
        FROM #Temp t
        WHERE [DisplayOrder] = 1
    Je l'avais modifié comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     UPDATE #Temp
        SET [RNotes] = (   
                            SELECT TOP 1 1
                            FROM #Temp t2
                            WHERE    [Notes] IS NOT NULL AND
                                    [DisplayOrder] = 2 AND
                                    t2.[Sequence] = t.[Sequence]
                        )
        FROM #Temp t
        WHERE [DisplayOrder] = 1  and  [DisplayOrder] = 2
    Comme j'ai eu l'erreur au moment de l’exécution j'ai repris mon ancien code qui marchait bien et qui ne marchait plus après ma modif.

    Avez vous une idée sur le problème,

    Merci

  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 893
    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 893
    Points : 53 132
    Points
    53 132
    Billets dans le blog
    6
    Par défaut
    Postez le code intégrale de votre procédure. Vous avez fait une procédure récursive. SQL Server est limité par construction à 32 appels récursif afin de ne pas faire tomber le serveur.

    En particulier je pense que c'est le cas de cette horreur :

    UPDATE #Temp
    SET ...
    FROM #Temp t

    Vous mettez à jour une table (#temp) en invoquant une autre instance de la même table...
    De plus l'usage des tables temporaires est à déconseillée et votre écriture révèle plusieurs fautes majeures :
    1) la forme sus mentionnées
    2) l'affectation de la variable [RNotes]

    A +

    A +

  3. #3
    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
    Merci pour ta réponse.

    Ce n'est pas moi qui a créé cette procédure mais je dois y faire des modifications pour ajouter d'autre informations.

    C'est pour ce fait que je fais des "exec nom_procedure" pour tester le résultat obtenu et c'est comme ça que j'ai eu ce message d'erreur .

    Le code est le suivant :

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
     
    ALTER PROCEDURE [dbo].[usp_MSP_Extract_DT_Tableau]
    (
     @ProjectName NVARCHAR(MAX)
    )
    AS
    BEGIN
     
        SET NOCOUNT ON
     
        DECLARE @UID UNIQUEIDENTIFIER
     
        CREATE TABLE #Temp (
            [DisplayOrder] INT NULL,
            [Sequence] NVARCHAR(255) NULL,
            [TaskName] NVARCHAR(255) NULL,
            [TaskWBS] NVARCHAR(255) NULL,   -- champs rajouté pour le code des tâches 
            [ProjectCode] NVARCHAR(255) NULL,
            [ResourceName] NVARCHAR(255) NULL,
            [TableRateCost] CHAR(1) NULL,
            [Costs] DECIMAL(25, 6) NULL,
            [Times] DECIMAL(25, 6) NULL,
            [Durate] NVARCHAR(255) NULL,
            [StartDate] DATETIME NULL,
            [EndDate] DATETIME NULL,
            [ProjectCreationDate] DATETIME NULL,
            [Speciality] NVARCHAR(255) NULL,
            [Department] NVARCHAR(255) NULL,
            [HasNotes] BIT NULL,
            [TASK_HAS_NOTES] BIT NULL,
            [Notes] NVARCHAR(255) NULL,
            [Active] BIT NULL,
            [Id] UNIQUEIDENTIFIER NULL,
            [ParentId] UNIQUEIDENTIFIER NULL,
        )    
     
        --On va récupérer dans un premier temps toutes les tâches associées au projet
        INSERT INTO #Temp (
                            [DisplayOrder],
                            [Sequence],
                            [TaskName],
                            [TaskWBS],
                            [TASK_HAS_NOTES], -- mon rajout pour les notes des projets
                            [ProjectCode],
                            [Costs],
                            [Times],
                            [Durate], 
                            [StartDate],
                            [EndDate],
                            [Notes],      --- mon ajout pour les notes 
                            [ProjectCreationDate],
                            [Active],
                            [Id],
                            [ParentId]
                        )
        SELECT    1,
                t.[TASK_OUTLINE_NUM],
                t.[TASK_NAME],
                t.[TASK_WBS],
                t.[TASK_HAS_NOTES],
     
                (
                    SELECT    b2.[TEXT_VALUE]
                    FROM [dbo].[MSP_TASKS] t2
                    LEFT OUTER JOIN [dbo].[MSP_TASK_CUSTOM_FIELD_VALUES] b2 ON (b2.[TASK_UID] = t2.[TASK_UID])
                    LEFT OUTER JOIN [dbo].[MSP_CUSTOM_FIELDS]c2 ON (c2.[MD_PROP_ID] = b2.[MD_PROP_ID])
                    LEFT OUTER JOIN [dbo].[MSP_LOOKUP_TABLE_VALUES] d2 ON (d2.[LT_STRUCT_UID] = b2.[CODE_VALUE])
                    WHERE    t2.[PROJ_UID] = p.[PROJ_UID] AND t2.[TASK_UID] = t.[TASK_UID] AND c2.[MD_PROP_NAME] = 'Code projet'
                ) AS [CodeProjet],
                (t.[TASK_COST] / 100), 
                (t.[TASK_WORK] / 480000),
                --(t.[TASK_WORK] / 60000),
                (t.TASK_DUR / 4800),
                t.[TASK_START_DATE],
                t.[TASK_FINISH_DATE],
                t.[TASK_NOTES],    --/////////////////mon rajout 
     
                p.[CREATED_DATE],
                ISNULL(t.[TASK_IS_ACTIVE], 0),
                t.TASK_UID,
                t.TASK_PARENT_UID
        FROM [dbo].[MSP_TASKS] t
        INNER JOIN [dbo].[MSP_PROJECTS] P ON P.[PROJ_UID] = t.[PROJ_UID]
        WHERE    p.PROJ_NAME  = @ProjectName AND
                t.TASK_IS_MILESTONE = 0 AND
                t.TASK_OUTLINE_NUM IS NOT NULL AND
                t.[TASK_COST] > 0
     
        --Puis dans un second temps toutes les ressources associées au projet
        INSERT INTO #Temp (
                            [DisplayOrder],
                            [Sequence],
                            [TaskName],
                            [TaskWBS],
                            [ResourceName],
                            [TableRateCost],
                            [Costs],
                            [Times],
                            [StartDate],
                            [EndDate],
                            [Notes],
                            [Speciality],
                            [Department],
                            [Active]
                        )
        SELECT    2,
                t.TASK_OUTLINE_NUM,
                ISNULL(r.[RES_NAME], t.[TASK_NAME]),t.[TASK_WBS],
                ISNULL(r.[RES_NAME], ''),
                CASE WHEN ASSN_COST_RATE_TABLE = 0 THEN
                    'A'
                ELSE
     
                    CASE WHEN ASSN_COST_RATE_TABLE = 1 THEN
                        'B'
                    ELSE
     
                        CASE WHEN ASSN_COST_RATE_TABLE = 2 THEN
                            'C'
                        ELSE
                            ''    
                        END    
                    END
                END,
                (a.[ASSN_COST] / 100),
                --Selon le type de ressource            
                CASE WHEN r.RES_TYPE = 21 THEN 
                    --Frais Coût d'un voyage A/R Europe
                    (a.[ASSN_WORK] / 60000) 
                ELSE 
                    --Intervenants
                    (a.[ASSN_WORK] / 480000)
                END,
                a.[ASSN_START_DATE],
                a.[ASSN_FINISH_DATE],
                a.[ASSN_NOTES],
                (
                    SELECT d2.LT_VALUE_TEXT
                    FROM [dbo].[MSP_RES_CUSTOM_FIELD_VALUES] b2 
                    INNER JOIN [dbo].[MSP_CUSTOM_FIELDS]c2 ON (c2.[MD_PROP_ID] = b2.[MD_PROP_ID])
                    INNER JOIN [dbo].[MSP_LOOKUP_TABLE_VALUES] d2 ON (d2.[LT_STRUCT_UID] = b2.[CODE_VALUE])
                    WHERE b2.[RES_UID] = r.[RES_UID] AND c2.[MD_PROP_NAME] = 'Spécialité'
                ) AS [Speciality],
                (
                    SELECT d2.LT_VALUE_TEXT
                    FROM [dbo].[MSP_RES_CUSTOM_FIELD_VALUES] b2 
                    INNER JOIN [dbo].[MSP_CUSTOM_FIELDS]c2 ON (c2.[MD_PROP_ID] = b2.[MD_PROP_ID])
                    INNER JOIN [dbo].[MSP_LOOKUP_TABLE_VALUES] d2 ON (d2.[LT_STRUCT_UID] = b2.[CODE_VALUE])
                    WHERE b2.[RES_UID] = r.[RES_UID] AND c2.[MD_PROP_NAME] = 'Département'
                ) AS [Departement],
                ISNULL(t.[TASK_IS_ACTIVE], 0)
        FROM [dbo].[MSP_TASKS] t
        INNER JOIN [dbo].[MSP_PROJECTS] p ON p.[PROJ_UID] = t.[PROJ_UID]
        LEFT OUTER JOIN [dbo].[MSP_ASSIGNMENTS] a ON (a.[PROJ_UID] = p.[PROJ_UID] AND a.[TASK_UID] = t.[TASK_UID])
        LEFT OUTER JOIN utb_ASSIGNMENTS as am ON (am.id_modif = 18 and am.ASSN_UID = a.ASSN_UID)
        LEFT OUTER JOIN [dbo].[MSP_RESOURCES] r ON (r.[RES_UID] = a.[RES_UID])
        WHERE    p.PROJ_NAME  = @ProjectName AND
                t.TASK_IS_MILESTONE = 0 AND
                t.TASK_OUTLINE_NUM IS NOT NULL AND
                t.[TASK_COST] > 0
     
        --On supprime les doublons inutiles
        DELETE FROM #Temp
        WHERE    [Costs] IS NULL AND
                [Times] IS NULL AND
                [StartDate] IS NULL AND
                [EndDate] IS NULL
     
        --On mets à jour les indicateurs des notes aux tâches directement rattachées aux ressources concernées
        UPDATE #Temp
        SET [HasNotes] = (    
                            SELECT TOP 1 1
                            FROM #Temp t2
                            WHERE    [Notes] IS NOT NULL AND
                                    [DisplayOrder] = 2 AND 
                                    t2.[Sequence] = t.[Sequence] AND 
                                    t2.[ResourceName] = t.[ResourceName]
                        )
        FROM #Temp t
     
        --Puis les tâches parents rattachées aux tâches concernées
        UPDATE #Temp
        SET [HasNotes] = (    
                            SELECT TOP 1 1
                            FROM #Temp t2
                            WHERE    [Notes] IS NOT NULL AND
                                    [DisplayOrder] = 2 AND 
                                    t2.[Sequence] = t.[Sequence]
                        )
        FROM #Temp t
        WHERE [DisplayOrder] = 1 
     
        --On mets également à jour les indicateurs des tâches parentes de toutes ses tâches jusqu'au plus haut parent
        --DECLARE task_cursor CURSOR FOR 
        --SELECT [Id]
        --FROM #Temp
        --WHERE    [DisplayOrder] = 1 AND 
        --        [HasNotes] = 1
     
        --OPEN task_cursor
     
        --FETCH NEXT FROM task_cursor INTO @UID
     
        --WHILE @@FETCH_STATUS = 0
        --BEGIN
     
        --    UPDATE #Temp
        --    SET [HasNotes] = 1
        --    FROM #Temp t
        --    WHERE t.[Id] IN (
        --                SELECT [ID] FROM [dbo].[MSP_GET_AllTaskParentUIDByTaskUId](@UID)
        --    )
     
        --    FETCH NEXT FROM task_cursor INTO @UID
        --END
     
        --CLOSE task_cursor
        --DEALLOCATE task_cursor
     
        --On renvoie le résultat final
        SELECT    [DisplayOrder],
                [Sequence],
                [ProjectCode],
                ISNULL([TaskName], '') AS [TaskName],
                [TaskWBS],
                [TableRateCost],
                [Costs],
                [Times],
                [Durate],
                [StartDate],
                [EndDate],
                [HasNotes],
                [TASK_HAS_NOTES], -- mon rajout pour les notes des projets 
                [Notes],
                [ProjectCreationDate],
                [Speciality],
                [Department],
                [Active]
        FROM #Temp
        ORDER BY CAST('/' + replace([Sequence], '.', '/') + '/' as hierarchyid), 
                 [DisplayOrder]
     
        DROP TABLE #Temp
     
    END

  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
    Bonjour,

    J'ai plus eu ce problème là après avoir relancer sql server ^^

  5. #5
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour,

    ?


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

Discussions similaires

  1. Réponses: 7
    Dernier message: 15/09/2016, 08h50
  2. Erreur lors de l'exécution d'une procédure stockée
    Par sab_info dans le forum Développement
    Réponses: 7
    Dernier message: 15/03/2013, 16h27
  3. Erreur d'Exécution d'une procédure stockée
    Par h.Madjid dans le forum SQL
    Réponses: 1
    Dernier message: 05/09/2007, 19h34
  4. Exécution d'une procédure stockée dans Sql
    Par Pascalp dans le forum Access
    Réponses: 4
    Dernier message: 01/09/2006, 11h47
  5. Accès non autorisé à l'exécution d'une procédure stockée
    Par celine33 dans le forum Bases de données
    Réponses: 6
    Dernier message: 11/01/2006, 10h27

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