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 :

PROBLEME avec INSERT INTO


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 272
    Points : 114
    Points
    114
    Par défaut PROBLEME avec INSERT INTO
    Bonjour tout le monde,

    Je viens demander votre aide car là je suis complètement à sec d'idée et bientôt de motivation. Je travail avec SQL Server 2005 et Access 2003 sur un gros projet et suis bien bloqué.

    J'ai une procédure stockée SQL Server qui :

    - vide une table à l'aide d'un TRUNCATE
    - rempli la même table avec les données renvoyées par une requete
    décrite juste au dessous.

    Rien de bien compliqué me direz-vous! Oui mais!!

    Voici le code de la procédure :
    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
    ALTER PROCEDURE [dbo].[sp_ins_tb_OOEP_OBJ_pourcent_art]
    	@OBJ_NO AS INT
    AS
    BEGIN
     
    	SET NOCOUNT ON;
     
    	DECLARE @DATE_DU_JOUR AS DATETIME
     
    	SET @DATE_DU_JOUR = getdate()
     
    	TRUNCATE TABLE tb_OOEP_OBJ_pourcent_art
     
    	EXEC sp_OOEP_OBJ_Extraire_semaine
     
           INSERT INTO tb_OOEP_OBJ_pourcent_art (  pa_art_cod, 
    							          pa_famille, 
    								  pa_qte_fam, 
    								  pa_obj_no,  
                                                                      pa_pourcentage, 
    								  pa_obj_fam_no, 
    								  pa_art_prev_oui_non, 
    								  pa_art_sem_deb, 
    								  pa_qte_art_man, 
    								  pa_calcule_le, 
    								  pa_modifie_le, 
    								  pa_qte_fam_res, 
    								  pa_art_lib, 
    								  pa_fam_lib, 
    								  pa_fam_nom, 
    								  pa_fam_genre,
    								  pa_fam_type, 
    								  pa_qte_mode_calc, 
    								  pa_qte_12_mois_passe, 
    								  pa_qte_csa_passe, 
    								  pa_pourcent_csa_passe)
     
    	SELECT           rq_OOEP_OBJ_pourcentage_article.art_cod, 
    			rq_OOEP_OBJ_pourcentage_article.art_famille, 
    			tb_ooep_obj_fam.obj_fam_montant, 
                            tb_ooep_obj_fam.obj_fam_obj_no, 
           		        rq_OOEP_OBJ_pourcentage_article.art_pourcentage_de_famille, 
    			tb_ooep_obj_fam.obj_fam_no, 
                           CASE WHEN tb_ooep_obj_fam.obj_fam_prev_oui_non = 1 THEN 
    			    1 
    			ELSE 
    			    0 
    			END AS prev_oui_non, 
    			CASE WHEN len(rtrim(tb_ooep_objectif.obj_semaine)) = 1 THEN 
    			    rtrim(tb_ooep_objectif.obj_annee) + '0' + rtrim(tb_OOEP_objectif.obj_semaine) 
    			ELSE 
    			    rtrim(tb_ooep_objectif.obj_annee) + rtrim(tb_OOEP_objectif.obj_semaine) 
    			END AS semaine_debut, 
    			NULL AS qte_art_man, 
    			GETDATE() AS Expr1, 
    			GETDATE() AS Expr2, 
    			NULL AS qte_fam_res, 
                            tb_articles.art_lib, 
    			rq_OOEP_OBJ_pourcentage_article.fam_description, 
    			rq_OOEP_OBJ_pourcentage_article.fam_nom, 
                            rq_OOEP_OBJ_pourcentage_article.fam_genre, 
    			rq_OOEP_OBJ_pourcentage_article.fam_type, 
    			'C' AS mode_calc, 
    			rq_OOEP_OBJ_FINALE.qte_12_mois_passe, 
                            rq_OOEP_OBJ_FINALE.qte_csa_passe, 
    			rq_OOEP_OBJ_FINALE.pourcent_csa_passe
    FROM			tb_ooep_objectif INNER JOIN tb_ooep_obj_fam ON 
    					tb_ooep_objectif.obj_no = tb_ooep_obj_fam.obj_fam_obj_no 
    				INNER JOIN rq_OOEP_OBJ_pourcentage_article ON 
    					tb_ooep_obj_fam.obj_fam_fa_no = rq_OOEP_OBJ_pourcentage_article.art_famille 
    				INNER JOIN tb_articles ON 
    					rq_OOEP_OBJ_pourcentage_article.art_cod = tb_articles.art_cod 
    				LEFT OUTER JOIN rq_OOEP_OBJ_FINALE ON 
    					rq_OOEP_OBJ_pourcentage_article.art_cod = rq_OOEP_OBJ_FINALE.art_cod
    WHERE     (tb_ooep_obj_fam.obj_fam_obj_no = @OBJ_NO)
    ORDER BY tb_ooep_obj_fam.obj_fam_obj_no, rq_OOEP_OBJ_pourcentage_article.art_famille
     
    END
    Et maintenant voici les symptômes :

    Je n'obtiens pas les même valeurs lorsque j'exécute la procédure stockée en entier ou juste la requête SQL (sans le INSERT INTO) ce qui à la longue est en train de me rendre complètement cinglé!!
    En fait les problèmes apparaissent sur les 3 derniers champs de la requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    rq_OOEP_OBJ_FINALE.qte_12_mois_passe, 
    rq_OOEP_OBJ_FINALE.qte_csa_passe, 
    rq_OOEP_OBJ_FINALE.pourcent_csa_passe
    Lorsque j'exécute la procédure dans son entier toute les lignes pour ces 3 champs sont nulles or, 60 (sur un total d'environ 1500 lignes) d'entre elles devraient avoir des valeurs non nulles!
    Et lorsque j'exécute uniquement la requête (sans le INSERT INTO) tout se passe à merveille, j'ai des données dans 60 de mes lignes et aucun problème n'apparaît.....

    Auriez-vous ne serait-ce qu'une minuscule idée pour me dépatouiller???
    Merci bien et bonne fin de journée à tous

    Julius

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

    Quel est le rôle de la procédure stockée sp_OOEP_OBJ_Extraire_semaine ?

    @++

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 272
    Points : 114
    Points
    114
    Par défaut
    Bonjour elsuket,

    Concernant la procédure sp_OOEP_OBJ_Extraire_semaine:

    Elle ne fait que mettre à jour une petite table contenant des informations sur les 52 semaines précédant la semaine en cours. Je viens de la tester elle fonctionne parfaitement. Je ne pense pas qu'elle soit pour quelque chose dans mon problème.

    Et merci de t'intéresser à mon soucis!

    A++

    Julius

  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,

    Elle ne fait que mettre à jour une petite table contenant des informations sur les 52 semaines précédant la semaine en cours. Je viens de la tester elle fonctionne parfaitement. Je ne pense pas qu'elle soit pour quelque chose dans mon problème.
    Donc cette table n'est pas impliquée dans le SELECT de l'ordre INSERT ...

    Je viens de remarquer que la variable @DATE_DU_JOUR ne vous sert pas, je viens donc de la remplacer dans le SELECT 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
    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
    ALTER PROCEDURE [dbo].[sp_ins_tb_OOEP_OBJ_pourcent_art]
    	@OBJ_NO AS INT
    AS
    BEGIN
     
    	SET NOCOUNT ON;
     
    	DECLARE @DATE_DU_JOUR AS DATETIME SET @DATE_DU_JOUR = GETDATE()
     
    	TRUNCATE TABLE dbo.tb_OOEP_OBJ_pourcent_art
     
    	EXEC dbo.sp_OOEP_OBJ_Extraire_semaine
     
    	INSERT INTO dbo.tb_OOEP_OBJ_pourcent_art
    	(
    		pa_art_cod,
    		pa_famille,
    		pa_qte_fam,
    		pa_obj_no,
    		pa_pourcentage,
    		pa_obj_fam_no,
    		pa_art_prev_oui_non,
    		pa_art_sem_deb,
    		pa_qte_art_man,
    		pa_calcule_le,
    		pa_modifie_le,
    		pa_qte_fam_res,
    		pa_art_lib,
    		pa_fam_lib,
    		pa_fam_nom,
    		pa_fam_genre,
    		pa_fam_type,
    		pa_qte_mode_calc,
    		pa_qte_12_mois_passe,
    		pa_qte_csa_passe,
    		pa_pourcent_csa_passe
    	) 
    	SELECT POURCENT_ARTICLE.art_cod, 
    			POURCENT_ARTICLE.art_famille, 
    			FAM.obj_fam_montant, 
                FAM.obj_fam_obj_no, 
           		POURCENT_ARTICLE.art_pourcentage_de_famille, 
    			FAM.obj_fam_no, 
                CASE FAM.obj_fam_prev_oui_non
    				WHEN 1 THEN 1 
    				ELSE 0
    			END AS prev_oui_non, 
    			CASE LEN(RTRIM(OBJECTIF.obj_semaine))
    				WHEN 1 THEN RTRIM(OBJECTIF.obj_annee) + '0' + RTRIM(OBJECTIF.obj_semaine)
    				ELSE RTRIM(OBJECTIF.obj_annee) + RTRIM(OBJECTIF.obj_semaine)
    			END AS semaine_debut,
    			NULL AS qte_art_man,
    			@DATE_DU_JOUR AS Expr1,
    			@DATE_DU_JOUR AS Expr2,
    			NULL AS qte_fam_res,
                ARTICLES.art_lib,
    			POURCENT_ARTICLE.fam_description,
    			POURCENT_ARTICLE.fam_nom,
                POURCENT_ARTICLE.fam_genre,
    			POURCENT_ARTICLE.fam_type,
    			'C' AS mode_calc,
    			OBJ_FINALE.qte_12_mois_passe, 
                OBJ_FINALE.qte_csa_passe, 
    			OBJ_FINALE.pourcent_csa_passe
    	FROM dbo.tb_ooep_objectif OBJECTIF
    	JOIN dbo.tb_ooep_obj_fam FAM ON OBJECTIF.obj_no = FAM.obj_fam_obj_no 
    	JOIN dbo.rq_OOEP_OBJ_pourcentage_article POURCENT_ARTICLE ON FAM.obj_fam_fa_no = POURCENT_ARTICLE.art_famille 
    	JOIN dbo.Tb_articles ARTCILES ON POURCENT_ARTICLE.art_cod = ARTCILES.art_cod 
    	LEFT JOIN dbo.rq_OOEP_OBJ_FINALE OBJ_FINALE ON POURCENT_ARTICLE.art_cod = OBJ_FINALE.art_cod
    	WHERE FAM.obj_fam_obj_no = @OBJ_NO
    	ORDER BY FAM.obj_fam_obj_no, POURCENT_ARTICLE.art_famille
    END
    Mais cela n'a pas d'impact sur votre SELECT.
    Exécutez-vous cette procédure avec le même @OBJ_NO lorsque vous exécutez le SELECT ?
    Avez-vous vérifié la demi-jointure gauche ?
    Sinon il n'y a pas de raison que vous obteniez un résultat différent ...

    @++

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 272
    Points : 114
    Points
    114
    Par défaut
    Merci bien, j'avais créer cette variable @DATE_DU_JOUR dans le but de l'utiliser dans mon select mais j'ai du oublier...

    Sinon oui j'exécute bien mon select et la procédure avec le même @OBJ_NO, vérifié et revérifié!

    Et mes jointures sont bonnes... Comme vous dites il n'y a pas de raison que j'obtienne des résultats différents dans ce cas, raison pour laquelle je m'arrache bientôt les cheveux...

    Il y a forcément un truc qui nous échappe ... mais lequel donc???

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 272
    Points : 114
    Points
    114
    Par défaut
    Re bonjour,


    Alors j'ai tout de même fini par trouver une solution... Très peu académique et j'imagine relativement "couteuse" mais au moins ça fonctionne! Je m'y remettrai d'un coup plus tard mais là je pouvais pas me permettre d'y passer encore plusieurs heures.

    En fait, lorsque je rempli ma table, j'initialise mes 3 champs à problème à "NULL". Puis, à la fin de l'INSERT INTO, j'appelle une autre procédure, que je viens de créer, qui elle va simplement mettre à jour la table de destination avec les bonnes valeurs! Je sais c'est nul à tout point de vue mais n'aillant trouvé rien d'autre je vais en rester là pour l'instant!

    Merci encore elsuket de t'être penché sur mon problème.

    Bonne journée à tous

    Julius

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

Discussions similaires

  1. probleme avec insert into oracle c# en asp dotnet
    Par brajae85 dans le forum Accès aux données
    Réponses: 2
    Dernier message: 26/08/2008, 02h23
  2. probleme avec insert into
    Par diawdji dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 28/01/2008, 02h00
  3. probleme avec insert into
    Par pseudobidon57 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 09/10/2007, 14h05
  4. Probleme avec INSERT INTO et select
    Par jmjmjm dans le forum Requêtes
    Réponses: 9
    Dernier message: 28/01/2007, 22h51
  5. probleme avec insert into
    Par bscorpion dans le forum Langage SQL
    Réponses: 5
    Dernier message: 05/07/2005, 13h00

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