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 :

requêtes éxécutant une procédure stockée


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 272
    Par défaut requêtes éxécutant une procédure stockée
    Bonjour,

    J'aimerais dans une requête appeler une procédure stockée. Le hic est que d'après ce que j'ai lu ce n'est pas possible.

    Ma procédure prend 2 paramètres en entrée (un article et un client) et me retourne une dizaine de valeur.

    Le truc est que j'aurais besoin d'exécuter cette procédure pour une multitude d'article d'ou ma question : comment pourrais-je faire pour contourner le problème et obtenir un truc "genre"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ar_code, cl_code, maProcedure(ar_code, cl_code) 
    FROM UneTable
    WHERE cl_code = 'XXX'
    D'avance merci et bonne fin de journée

    Julius

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 7
    Par défaut
    Peut être que tu n'es pas vraiment obligé d'appeler la procédure. quelle est le code de ta procedure ?

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

    Informations forums :
    Inscription : Janvier 2008
    Messages : 272
    Par défaut
    Salut Renaud58,

    J'ai bien penser modifier le code de la procédure mais... elle est assez "affreuse". De plus, je ne dois faire ça qu'une seule fois. J'aimerais juste éviter de devoir l'appeler 130 fois.

    Cela dit voici le code de la dite 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
    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
    ALTER    PROCEDURE [dbo].[xsp_lbsa_getArtInfo4CC]
    	@ar_code nvarchar(30)
    	,@cl_code nvarchar(20)
    AS
    BEGIN
    DECLARE @last2 nvarchar(2)
    DECLARE @ar_code_brut nvarchar(30)
    DECLARE @ar_code_base nvarchar(30)
     
    SET NOCOUNT ON;
    IF (@ar_code !='')
    BEGIN
     
    --SELECT @ar_code='1520d1.55TB', @cl_code='0296'
     
    SELECT @last2=right(@ar_code,2), @ar_code_brut= @ar_code
    IF EXISTS(SELECT nom FROM [07_traitements] WHERE nom=@last2)
    BEGIN
    	SELECT @ar_code_base=@ar_code, @ar_code=left(@ar_code,len(@ar_code)-2), @ar_code_brut= @ar_code
    END
     
    SELECT @ar_code=@ar_code + '%'
     
    SET NOCOUNT OFF;
    SELECT * FROM (
    	SELECT
    		articles.ar_code
    		--,lbsa_reap_OFEnCours 			as cim_ofnum
    		--,isnull(QTECDEE,0) + isnull(QTESTOC,0) 	as cim_ofqte
    		,listof 				as cim_ofnum
    		,isnull(tqte,0) 		as cim_ofqte
    		,nom					as cim_ofnextop
     
    		,isnull(stklbsa.stk_lbsa,0)	as stk_lbsa
    		,isnull(articles.ar_stockmin,0)	as min_lbsa
    		,isnull(stkcli.stk_cli,0)	as stk_cli
    		,isnull(smincli.min_cli,0)	as min_cli
    		,isnull(stkothers.stk_oth,0)	as stk_others
    		,isnull(cc.cc_solde,0)		as cc_solde,
    		as_conso_yc, as_consob_yc,
    		as_conso_y1, as_consob_y1
     
    	FROM
    		(SELECT ar_code, lbsa_reap_ofencours, ar_stockmin FROM articles WITH (NOLOCK)
    		WHERE
    			ar_code not in ('cf','6000') and
    			ar_code like @ar_code 
    			and ar_code not like @ar_code_brut + '[0-9]%'
    		) as articles
     
    --	LEFT JOIN cimproductimport..[OF] cimof  WITH (NOLOCK)
    --		ON cimof.numof = articles.lbsa_reap_OFEnCours
    --	LEFT JOIN vlbsa_cimproduct_prochaineOpParOF  WITH (NOLOCK)
    --		ON cimof.numof = vlbsa_cimproduct_prochaineOpParOF.numof
     
    	LEFT JOIN
    		(SELECT 
    			li_article
    			,sum(li_qte * CASE WHEN li_stock=1 THEN 1 ELSE -1 END) as stk_lbsa
    		FROM
    			lignes with (NOLOCK)
    		WHERE 	li_article LIKE @ar_code
    		AND	li_date>'01.01.2007'
    		AND	li_stock !=0
    		AND	li_nostock =0
    		GROUP BY li_article	
    		) stklbsa ON stklbsa.li_article = articles.ar_code
     
    	LEFT JOIN
    		(SELECT 
    			li_article
    			,sum(li_qte * CASE WHEN li_stock=1 THEN 1 ELSE -1 END) as stk_cli
    		FROM
    			lignes with (NOLOCK)
    		WHERE 	li_article LIKE @ar_code
    		AND	li_date>'01.01.2007'
    		AND	li_stock !=0
    		AND	li_nostock IN (SELECT ts_no FROM stocksclients WHERE cl_code=@cl_code)
    		GROUP BY li_article	
    		) stkcli ON stkcli.li_article = articles.ar_code
     
    	LEFT JOIN
    		(SELECT
    			ar_code
    			,cast(sum(sta_stockmin) as int)  as min_cli
    		FROM
    			stocksMinArticles WITH (NOLOCK)
    		WHERE
    			ar_code like @ar_code
    		AND	ts_no IN (SELECT ts_no FROM stocksclients WHERE cl_code=@cl_code)
    		GROUP BY ar_code
    		) smincli ON smincli.ar_code = articles.ar_code
     
    	LEFT JOIN
    		(
    		SELECT 
    			li_article
    			,sum(li_qte * CASE WHEN li_stock=1 THEN 1 ELSE -1 END) stk_oth
    		FROM
    			lignes with (NOLOCK)
    		WHERE 	li_article LIKE @ar_code
    		AND	li_date>'01.01.2007'
    		AND	li_stock !=0
    		AND	li_nostock NOT IN (SELECT ts_no FROM stocksclients WHERE cl_code=@cl_code)
    		AND	li_nostock !=0
    		GROUP BY li_article	
    		) stkothers ON stkothers.li_article = articles.ar_code
     
    	LEFT JOIN
    		(SELECT 
    			li_article
    			,sum(li_solde) as cc_solde
    		FROM
    			lignes with (NOLOCK)
    		WHERE 	li_article LIKE @ar_code
    		AND	li_date>'01.01.2007'
    		AND	li_typedoc='CC'
    		AND	li_posteouvert!=0
    		GROUP BY li_article	
    		) cc ON cc.li_article = articles.ar_code
     
    	LEFT JOIN vlbsa_cimproduct_articles_of_encours cimof ON cimof.numdossier = articles.ar_code
     
    	LEFT JOIN vlbsa_cimproduct_prochaineOpParOF  WITH (NOLOCK)
    		ON cimof.numof = vlbsa_cimproduct_prochaineOpParOF.numof
     
    	INNER JOIN articles_statistiques WITH (NOLOCK)
    		ON articles_statistiques.ar_code = articles.ar_code
     
    	WHERE
    		articles.ar_code like @ar_code
    	) as subsel
     
    	WHERE
    		((cim_ofqte+stk_lbsa+stk_cli+stk_others+min_lbsa+min_cli) !=0) or ar_code=@ar_code_base
     
    ORDER by ar_code
     
    END
     
    END
    Je pense bien qu'il est possible de jouer sur le select et de modifier la condition where mais j'avoue que je ne sais pas trop comment. Ce n'est pas moi qui ai codé cette procédure...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 7
    Par défaut
    Si c'est pour ne le faire qu'une fois, tu dois avoir moyen d'écrire quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT 'dbo.xsp_lbsa_getArtInfo4CC(''' + ar_code + ''',''' + cl_code + ''')'
    FROM UneTable
    WHERE cl_code = 'XXX'
    Et ensuite tu exécutes le résultat de cette requête copier/coller dans l'éditeur. Je ne sais pas si ça peut résoudre ton problème... Sinon il y a surement des moyens plus scientifique en utilisant des curseurs :/

    A essayer tu dois aussi pouvoir modifier la requête précedente pour faire quelque chose du genre et ainsi tout avoir dans une table temporaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into #temp execute dbo.xsp_lbsa_getArtInfo4CC

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

    Informations forums :
    Inscription : Janvier 2008
    Messages : 272
    Par défaut
    j'aime bien la 1ère solution , les résultat sont là mais le hic est que je ne peux pas copier l'ensemble des résultats en une fois!! Je vais donc tenter de mettre tout ça dans une table temporaire.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 7
    Par défaut
    ben essai ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT 'INSERT INTO #temp execute dbo.xsp_lbsa_getArtInfo4CC(''' + ar_code + ''',''' + cl_code + ''')'
    FROM UneTable
    WHERE cl_code = 'XXX'
    mais il faut que tu initialises ta table temporaire.

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

Discussions similaires

  1. [MySQL] génèrer une requête ou une procédure stockée
    Par Invité dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 16/07/2013, 19h22
  2. Réponses: 5
    Dernier message: 06/10/2011, 17h15
  3. Contrôler la totalité des requêtes d'une procédure stockée.
    Par insane_80 dans le forum Développement
    Réponses: 2
    Dernier message: 02/09/2009, 11h36
  4. Problème de longueur de requête dans une procédure stockée
    Par doudou_rennes dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 21/03/2007, 16h39
  5. Réponses: 4
    Dernier message: 16/12/2005, 16h25

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