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 :

Question sur procedure stockée avec WITH


Sujet :

MS SQL Server

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 9
    Points : 8
    Points
    8
    Par défaut Question sur procedure stockée avec WITH
    Bonjour,

    J'ai une procedure stockée voir ci desous

    elle se compose d'un WITH, d'un update1, d'un select et d'un update2

    - si je met le with et l'update1
    ca fonctionne

    - si je met les 4 (WITH, d'un update1, d'un select et d'un update2)
    ca m'envoi une erreur "Nom d'objet 'CTE_GAINS_SEPTEMBRE' non valide."

    et t'il possible de mettre plus d'une requete joint au WITH ??
    Que puis-je faire??

    Merci d'avance

    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
    @DelailVal int
    AS
    BEGIN
    declare @SoldeUpd float,@DtMaj datetime	
    -- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
     
        -- Insert statements for procedure here
    WITH 
    	CTE_GAINS_SEPTEMBRE AS
    	(
    		SELECT     Gain.RefGain,Gain.Gain,idann 
    FROM  Gain LEFT OUTER JOIN  CampagneRemunerationParam ON Gain.RefremParam = CampagneRemunerationParam.RefRemParam 
    WHERE (Gain.DtDate = CONVERT(CHAR(10), GETDATE() - @DelailVal, 103))  and (delaival=7) and (F = 1 or v=1))
     
     
    UPDATE dbo.Gain
    SET gain = 0,
    	gainvalid= C.gain,
    gainadigaming= ((C.gain * 30 )/100),
    	--F = 0,
    vvalid = CASE 
         WHEN v=1 THEN 1
    	 else 0
    	 END,
    Fvalid= CASE 
       	 WHEN F=1 THEN 1
    	else 0
    	 END,
    v = CASE 
         WHEN v=1 THEN 0
    	 else 0
    	 END,
    F= CASE 
       	 WHEN F=1 THEN 0
    	else 0
    	 END,
    	--FValid = 1,
    	AnnVali = 1,
    	AnnValiDt = GETDATE(),
    anncomment='Validation auto.'
    FROM dbo.Gain AS G
    JOIN CTE_GAINS_SEPTEMBRE AS C ON G.refgain = C.refgain
     
     
    SELECT   @SoldeUpd= Solde.Solde - C.gain + ((C.gain * 30 )/100) FROM  Solde JOIN CTE_GAINS_SEPTEMBRE AS C ON Solde.Refuser = C.idann where  Solde.Refuser = C.idann 
     
    UPDATE    Solde SET Solde = @SoldeUpd, DtUpd = CONVERT(CHAR(10), GETDATE(), 103) FROM  Solde  JOIN CTE_GAINS_SEPTEMBRE AS C ON Solde.Refuser = C.idann where  Solde.Refuser = C.idann 
    END

  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 : 42
    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,

    La requête introduite par WITH est une expression de table commune, c'est à dire une vue qui n'existe que pour la requête qui la suit : l'expression de table commune et sa requête ont la même étendue d'exécution.
    C'est pour cela que vous ne pouvez pas la référencer dans le SELECT qui suit le premier UPDATE, ni ailleurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FROM  Solde JOIN CTE_GAINS_SEPTEMBRE AS C ON Solde.Refuser = C.idann WHERE  Solde.Refuser = C.idann
    Vous avez écrit deux fois la même chose, mais seule la première écriture est à la norme et plus élégante

    @++

Discussions similaires

  1. [SQL 2000]question sur procedure stockée et OSQL
    Par wfirefox dans le forum Outils
    Réponses: 4
    Dernier message: 29/06/2007, 09h59
  2. simple question sur du html avec frames
    Par Thordax dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/05/2006, 11h48
  3. probleme procedure stockée avec Mysql
    Par emna_bz dans le forum Installation
    Réponses: 2
    Dernier message: 01/02/2006, 16h26
  4. Procedure stockée avec un parametre en OUTPUT
    Par Nadaa dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/09/2004, 20h06
  5. Procedure stockée avec ntext dans SQL server 2000
    Par nagababa dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/11/2003, 20h46

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