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 :

[SQL-SERVER 2005]Procédure stockée avec table temporaire


Sujet :

MS SQL Server

  1. #1
    Membre averti
    Inscrit en
    Août 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 360
    Points : 396
    Points
    396
    Par défaut [SQL-SERVER 2005]Procédure stockée avec table temporaire
    Bonjour,

    Je cherche à ne pas utiliser les curseurs en T-SQL, préférant créer une table temporaire.

    Cette table me sert à stocker le résultat d'une première Procédure Stockée et ensuite de sélectionner ce dont j'ai besoin...

    Voici le code :

    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
     
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
     
    GO
     
    ALTER PROC [dbo].[PS_UNITAIRE_CHOIX_LOTS]
     
    @Z_Date smalldatetime,
    @Z_Lot_Deb nvarchar(10),
    @Z_Lot_Fin nvarchar(10)
     
    AS
     
    CREATE TABLE #TEMP_TABLE
    (
    num_adress int,
    modele nvarchar(3),
    produit int,
    categorie nvarchar(1),
    territorialite nvarchar(1),
    vignettes int,
    agence int,
    compte nvarchar(16),
    vignette_deb nvarchar(7),
    annee_cde int,
    mois_cde int,
    jour_cde int,
    vignette_fin nvarchar(7),
    nom_client nvarchar(35),
    adresse_2 nvarchar(35),
    adresse_3 nvarchar(35),
    adresse_4 nvarchar(35),
    cp nvarchar(10),
    ville nvarchar(30),
    lot nvarchar(9),
    ordre nvarchar(50),
    Num_Unique nvarchar(50),
    mode int,
    reception_cgd smalldatetime,
    quantite int,
    Nb_Vign int,
    Etranger nvarchar(10)
    )
     
    INSERT INTO #TEMP_TABLE
    EXEC	[dbo].[PS_UNITAIRE]
    		@Z_Date = @Z_Date
     
    SELECT #TEMP_TABLE.num_adress, #TEMP_TABLE.modele, #TEMP_TABLE.produit, #TEMP_TABLE.categorie, #TEMP_TABLE.territorialite, #TEMP_TABLE.vignettes, #TEMP_TABLE.mode, #TEMP_TABLE.agence, #TEMP_TABLE.compte, #TEMP_TABLE.vignette_deb, #TEMP_TABLE.annee_cde, #TEMP_TABLE.mois_cde, #TEMP_TABLE.jour_cde, #TEMP_TABLE.vignette_fin, #TEMP_TABLE.nom_client, #TEMP_TABLE.adresse_2, #TEMP_TABLE.adresse_3, #TEMP_TABLE.adresse_4, #TEMP_TABLE.cp, #TEMP_TABLE.ville, #TEMP_TABLE.lot, #TEMP_TABLE.ordre, #TEMP_TABLE.quantite, #TEMP_TABLE.reception_cgd, #TEMP_TABLE.Num_Unique, #TEMP_TABLE.Nb_Vign, #TEMP_TABLE.Etranger
    FROM #TEMP_TABLE
    WHERE (((#TEMP_TABLE.lot) Between @Z_Lot_Deb And @Z_Lot_Fin))
    ORDER BY #TEMP_TABLE.lot, #TEMP_TABLE.ordre;
     
    RETURN
    Ce code est syntaxiquement correct, mais dans le front que j'utilise, un projet .adp, lorsque j'exécute la PS à l'ouverture d'un état, un message d'erreur apparait :

    "La commande fournisseur pour l'ensemble enfant de lignes ne produit pas un ensemble de lignes"
    Je ne comprends pas du tout le message d'erreur !!!

    Il paraitrait qu'il s'agit d'un bug de SQL SERVER 2005 corrigé par le Service Pack 2, selon le
    http://support.microsoft.com/kb/294141/en.

    Je n'ai pas la possibilité d'installer cette update et je ne sais plus comment faire pour avancer sur ce problème...

    Quelqu'un pourrait-il m'aider ??

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    APPLIES TO
    • Microsoft Data Access Components 2.1
    • Microsoft Data Access Components 2.1 Service Pack 2
    • Microsoft Data Access Components 2.1 Service Pack 1
    • Microsoft Data Access Components 2.1 Service Pack 2
    • Microsoft Data Access Components 2.5
    • Microsoft Data Access Components 2.5 Service Pack 1
    • Microsoft Data Access Components 2.6
    • Microsoft Data Access Components 2.7

    En fait ton pb est lié à ton client. As-tu essayé d'installer le MDAC 2.8 sur ton client ? Ce pb est lié au MDAC et non à SQL Server directement.
    Emmanuel T.

  3. #3
    Membre averti
    Inscrit en
    Août 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 360
    Points : 396
    Points
    396
    Par défaut
    merci de ta réponse...

    Mais je ne peux rien installer de plus sur le client ni sur le serveur...

  4. #4
    Membre habitué

    Inscrit en
    Octobre 2002
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 139
    Points : 177
    Points
    177
    Par défaut
    hello,

    as tu essayé de faire tourner ta procédure hors de ton rapport?
    Es tu certain que la table temporaire est accessible dans la seconde procédure stocké?
    Ta syntaxe me parait un peu bizarre...

    Krest

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par krest
    Es tu certain que la table temporaire est accessible dans la seconde procédure stocké?

    Krest
    Effectivement les tables temporaires locales ont une existance que dans le contexte de la procédure stockée qui l'a créée. Il faut donc trouver une autre solution. Tu peux essayer avec une table temporaire globale qui a une existence durant toute la session utilisateur.
    Bon courage pour la suite.

  6. #6
    Membre averti
    Inscrit en
    Août 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 360
    Points : 396
    Points
    396
    Par défaut
    Bonjour,

    J'ai résolu mon problème en réunissant les 2 procédures stockées en une seule.

    La procédure est plus longue mais s'exécute rapidement, puisque qu'elle est compilée.

    Juste pour info, comment on declare une table temporaire globale ??

    Cordialement,

    Mathieu.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Points : 406
    Points
    406
    Par défaut
    Voici comment on déclare les deux types de tables.

    Table temporaire locale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CREATE TABLE #tempo_locale( .... )
    Table temporaire globale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CREATE TABLE ##tempo_globale ( ......)
    Bon courage pour la suite.

  8. #8
    Membre averti
    Inscrit en
    Août 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 360
    Points : 396
    Points
    396
    Par défaut
    Merci pour ta réponse...

    A +

  9. #9
    Membre averti
    Inscrit en
    Août 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 360
    Points : 396
    Points
    396
    Par défaut
    J'ai essayé et effectivement, c'etait bien ce prblème...

    Voic l'appel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    USE [Exp_Chq]
    GO
     
    DECLARE	@return_value int
     
    EXEC	@return_value = [dbo].[PS_UNITAIRE_CHOIX_LOTS_EXPORT]
    		@Z_Date = '26/07/2007',
    		@Z_Lot_Deb = 'D07114N01',
    		@Z_Lot_Fin = 'D07114N01'
     
    SELECT	'Return Value' = @return_value
     
    GO
    Et voici la PS :

    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
     
    CREATE PROCEDURE PS_UNITAIRE_CHOIX_LOTS_SUIVI
    @Z_Date smalldatetime,
    @Z_Lot_Deb nvarchar(10),
    @Z_Lot_Fin nvarchar(10)
     
    AS
     
    CREATE TABLE ##temp_table(
    num_adress int,
    modele nvarchar(3),
    produit int,
    categorie nvarchar(1),
    territorialite nvarchar(1),
    vignettes int,
    agence int,
    compte nvarchar(16),
    vignette_deb nvarchar(7),
    annee_cde int,
    mois_cde int,
    jour_cde int,
    vignette_fin nvarchar(7),
    nom_client nvarchar(35),
    adresse_2 nvarchar(35),
    adresse_3 nvarchar(35),
    adresse_4 nvarchar(35),
    cp nvarchar(10),
    ville nvarchar(30),
    lot nvarchar(9),
    ordre nvarchar(50),
    Num_Unique nvarchar(50),
    mode int,
    reception_cgd smalldatetime,
    quantite int,
    Nb_Vign int,
    Etranger nvarchar(10)
    )
     
    INSERT INTO ##temp_table
    EXEC	[dbo].[PS_UNITAIRE_CHOIX_LOTS]
    		@Z_Date = @Z_Date,
    		@Z_Lot_Deb = @Z_Lot_Deb,
    		@Z_Lot_Fin = @Z_Lot_Fin
    SELECT DISTINCT ##temp_table.nom_client, ##temp_table.adresse_2, ##temp_table.adresse_3, ##temp_table.adresse_4, ##temp_table.cp, ##temp_table.ville, ##temp_table.lot, ##temp_table.ordre, ##temp_table.Num_Unique, T_Suivi.Mode_Exp, T_Suivi.Num_AR_Clef, T_Suivi.Num_AR_FR, T_Suivi.Num_Exp
    FROM ##temp_table INNER JOIN T_Suivi ON ##temp_table.Num_Unique = T_Suivi.Num_Unique;

    Un grand merci à vous...

    A+

Discussions similaires

  1. [ODBC] [SQL Server 2005] Procédure stockée
    Par geo54 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 08/06/2010, 09h48
  2. Réponses: 1
    Dernier message: 13/05/2009, 12h57
  3. SQL SERVER 2005 procédure stockée
    Par elrick richese dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/03/2009, 11h54
  4. [SQL Server 2005] Procédure stockée dynamique ?
    Par nitrous007 dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 20/12/2006, 13h54

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