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 :

Identificateur ne peut pas être lié


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 96
    Points : 63
    Points
    63
    Par défaut Identificateur ne peut pas être lié
    Bonjour à tous !

    Je modifie une vue qui est sur un serveur SQL-Server 2005.
    Mais dès que je veux enregistrer la vue je me fais jeter comme une chaussette.

    Le message d'erreur :



    A la base je ne modifie qu'un seul bout de code présent à deux endroits de la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CASE WHEN (PCH1.PROJECT IS NOT NULL) THEN PCH1.PROJECT
    	ELSE PCH1.OCRCODE
    END AS [Cost Center Code],
    CASE WHEN (PCH1.PROJECT IS NOT NULL)  THEN OPRJ.PRJNAME
    	ELSE OOCR.OCRNAME
    END AS [Cost Center Name],
    Je me suis rendu compte que j'oubliais certains cas alors j'ai essayé deux corrections :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CASE WHEN ((PCH1.PROJECT IS NOT NULL) OR (PCH1.PROJECT <> '')) THEN PCH1.PROJECT
    	ELSE PCH1.OCRCODE
    END AS [Cost Center Code],
    CASE WHEN ((PCH1.PROJECT IS NOT NULL) OR (PCH1.PROJECT <> '')) THEN OPRJ.PRJNAME
    	ELSE OOCR.OCRNAME
    END AS [Cost Center Name],
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CASE WHEN (ISNULL(PCH1.PROJECT, '') <> '') THEN PCH1.PROJECT
    	ELSE PCH1.OCRCODE
    END AS [Cost Center Code],
    CASE WHEN (ISNULL(PCH1.PROJECT, '') <> '')  THEN OPRJ.PRJNAME
    	ELSE OOCR.OCRNAME
    END AS [Cost Center Name],
    Si je les execute comme de simple requête je n'ai aucun souci. Pour la vue la vérification SQL réussie mais la sauvegarde échoue avec le message d'erreur.

    Si quelqu'un a une solution je suis preneur !

  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,

    L'alias de table ou de vue PCH1 existe-t-il dans votre requête ?
    Et si oui, est-ce que la table ou la vue qu'il aliase existe ?

    Si oui, il faudrait que nous ayons le texte complet de la requête.

    @++

  3. #3
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 96
    Points : 63
    Points
    63
    Par défaut
    Alors pour répondre à tes questions "PCH1" est une table (pas d'alias). Je l'ai toujours utilisé de cette manière sans jamais avoir eu de souci.
    Ce qui m'embête vraiment ce soit le fait que le problème vienne lors de la création de la vue.

    La requête est en deux partie où seul les jointures changent. Jointures qui fonctionnaient et fonctionnent toujours d'ailleurs.
    Voici ma requête qui est plutôt indigeste je l'avoue !
    J'ai mis en rouge les deux passages où mon code plante :
    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
    SELECT
    	'Cryospace' 	AS [Affiliate Name],
    	''			AS [Sub Affiliate Name],
    	'Ingénierie' 	AS [Business Line],
    	OPCH.CARDNAME 	AS [Supplier Name],
    	''			AS [Supplier Internal/External],
    	[Supplier Address],
    	[Supplier ZIP],
    	[Supplier City],
    	[Supplier Country Code],
    	[Supplier Tax Code],
    	''			AS [Supplier DUNS Code],
    	''			AS [Contract Code],
    	[Invoice Currency],
    	CONVERT(nVARCHAR, OPCH.DOCDATE, 112) 	AS [Invoice Accounting Date],
    	PCH1.LINETOTAL AS [Invoice Line Amount in Currency],
    	PCH1.QUANTITY	AS [Invoice Quantity],
    	''			AS [Invoice Quantity Unit],
    	OPCH.DOCNUM	AS [Invoice Number],
    	PCH1.LINENUM	AS [Invoice Line Number],
    	[Purchase Order Number],
    	[Purchase Order Line Number],
    	OPCH.COMMENTS	AS [Invoice Line Description],
    	[Purchase Order Line Description],
    	CASE WHEN (([Opex Capex] <> 'OPEX') AND ([Opex Capex] <> 'CAPEX'))  THEN 'OPEX'
    		ELSE [Opex Capex]
    	END AS [Opex Capex bis],
    	OSLP.SLPNAME	AS [Requisitioner Name],
    	PCH1.ITEMCODE	AS [Air Liquide Article/Service Code],
    	PCH1.DSCRIPTION	AS [Air Liquide Article/Service Name],
    	[Air Liquide Article/Service Group Name],
    	[Supplier Article/Service Code],
    	''			AS [Hermes Code],
    	PCH1.ACCTCODE	AS [Cost Accounting Code],
    	OACT.ACCTNAME	AS [Cost Accounting Name],
    	CASE WHEN ((PCH1.PROJECT IS NOT NULL) OR (PCH1.PROJECT <> '')) THEN PCH1.PROJECT
    		ELSE PCH1.OCRCODE
    	END AS [Cost Center Code],
    	CASE WHEN ((PCH1.PROJECT IS NOT NULL) OR (PCH1.PROJECT <> ''))  THEN OPRJ.PRJNAME
    		ELSE OOCR.OCRNAME
    	END AS [Cost Center Name],	
    	[Activity Name],
    	''			AS [Hermes Mapping Code],
    	YEAR(OPCH.DocDate) AS NumAnnee, 
    	MONTH(OPCH.DocDate) AS NumMois
    
    FROM
    OPCH
    	INNER JOIN Vue_Spend_Analysis_Branche1 AS [BRANCHE1]
    	ON OPCH.CARDCODE = BRANCHE1.CARDCODE
    	INNER JOIN PCH1
    	ON PCH1.DOCENTRY = OPCH.DOCENTRY
    	LEFT OUTER JOIN OSLP
    	ON PCH1.SLPCODE = OSLP.SLPCODE
    	LEFT OUTER JOIN OACT
    	ON PCH1.ACCTCODE = OACT.ACCTCODE
    	LEFT OUTER JOIN OPRJ
    	ON PCH1.PROJECT = OPRJ.PRJCODE
    	LEFT OUTER JOIN OOCR
    	ON PCH1.OCRCODE = OOCR.OCRCODE
    	LEFT OUTER JOIN Vue_Spend_Analysis_Branche2 AS [BRANCHE2]
    	ON PCH1.ITEMCODE = BRANCHE2.ITEMCODE
    	LEFT OUTER JOIN Vue_Spend_Analysis_Branche3 AS [BRANCHE3]
    	ON PCH1.BaseEntry = BRANCHE3.DocEntry AND PCH1.BASELINE = BRANCHE3.LINENUM
    WHERE PCH1.BASETYPE = 22 
    
    UNION
    
    SELECT
    	'Cryospace' 	AS [Affiliate Name],
    	''			AS [Sub Affiliate Name],
    	'Ingénierie' 	AS [Business Line],
    	OPCH.CARDNAME 	AS [Supplier Name],
    	''			AS [Supplier Internal/External],
    	[Supplier Address],
    	[Supplier ZIP],
    	[Supplier City],
    	[Supplier Country Code],
    	[Supplier Tax Code],
    	''			AS [Supplier DUNS Code],
    	''			AS [Contract Code],
    	[Invoice Currency],
    	CONVERT(nVARCHAR, OPCH.DOCDATE, 112) 	AS [Invoice Accounting Date],
    	PCH1.LINETOTAL AS [Invoice Line Amount in Currency],
    	PCH1.QUANTITY	AS [Invoice Quantity],
    	''			AS [Invoice Quantity Unit],
    	OPCH.DOCNUM	AS [Invoice Number],
    	PCH1.LINENUM	AS [Invoice Line Number],
    	[Purchase Order Number],
    	[Purchase Order Line Number],
    	OPCH.COMMENTS	AS [Invoice Line Description],
    	[Purchase Order Line Description],
    	CASE WHEN (([Opex Capex] <> 'OPEX') AND ([Opex Capex] <> 'CAPEX'))   THEN 'OPEX'
    		ELSE [Opex Capex]
    	END AS [Opex Capex bis],
    
    	OSLP.SLPNAME	AS [Requisitioner Name],
    	PCH1.ITEMCODE	AS [Air Liquide Article/Service Code],
    	PCH1.DSCRIPTION	AS [Air Liquide Article/Service Name],
    	[Air Liquide Article/Service Group Name],
    	[Supplier Article/Service Code],
    	''			AS [Hermes Code],
    	PCH1.ACCTCODE	AS [Cost Accounting Code],
    	OACT.ACCTNAME	AS [Cost Accounting Name],
    	CASE WHEN ((PCH1.PROJECT IS NOT NULL) OR (PCH1.PROJECT <> '')) THEN PCH1.PROJECT
    		ELSE PCH1.OCRCODE
    	END AS [Cost Center Code],
    	CASE WHEN ((PCH1.PROJECT IS NOT NULL) OR (PCH1.PROJECT <> '')) THEN OPRJ.PRJNAME
    		ELSE OOCR.OCRNAME
    	END AS [Cost Center Name],
    		[Activity Name],
    	''			AS [Hermes Mapping Code],
    	YEAR(OPCH.DocDate) AS NumAnnee, 
    	MONTH(OPCH.DocDate) AS NumMois
    
    FROM
    OPCH
    	INNER JOIN Vue_Spend_Analysis_Branche1 AS [BRANCHE1]
    	ON OPCH.CARDCODE = BRANCHE1.CARDCODE
    	INNER JOIN PCH1
    	ON PCH1.DOCENTRY = OPCH.DOCENTRY
    	LEFT OUTER JOIN OSLP
    	ON PCH1.SLPCODE = OSLP.SLPCODE
    	LEFT OUTER JOIN OACT
    	ON PCH1.ACCTCODE = OACT.ACCTCODE
    	LEFT OUTER JOIN OPRJ
    	ON PCH1.PROJECT = OPRJ.PRJCODE
    	LEFT OUTER JOIN OOCR
    	ON PCH1.OCRCODE = OOCR.OCRCODE
    	LEFT OUTER JOIN Vue_Spend_Analysis_Branche2 AS [BRANCHE2]
    	ON PCH1.ITEMCODE = BRANCHE2.ITEMCODE
    	LEFT OUTER JOIN Vue_Spend_Analysis_Branche4 AS [BRANCHE4]
    	ON PCH1.BaseEntry = BRANCHE4.DocEntry AND PCH1.BASELINE = BRANCHE4.LINENUM
    WHERE PCH1.BASETYPE = 20 OR PCH1.BASETYPE = -1

  4. #4
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    PCH1, est ce une table, une vue ou un alias ?
    Je ne le retrouve pas dans le texte de ta requête.
    Je crois que c'est le même problème pour les autres champs.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  5. #5
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 96
    Points : 63
    Points
    63
    Par défaut
    Mes tables sont déclarés de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    FROM
    OPCH	INNER JOIN Vue_Spend_Analysis_Branche1 AS [BRANCHE1]
    	ON OPCH.CARDCODE = BRANCHE1.CARDCODE
    	INNER JOIN PCH1
    	ON PCH1.DOCENTRY = OPCH.DOCENTRY
    Ce sont bien des tables (Base de données SAP de ma boite => les tables ont toujours ce format là).

    En revanche pour les champs du style de "[Activity Name]," ce sont des champs provenant des vues sur lesquelles je fais des jointures.

    J'ai une question, le fait de parenthèser ou de trop parenthèser dans mes expression peut-il gêner ? Dans le sens où SQL-Serveur interprète le texte entre parenthèse comme des sous requêtes ?

    Je dis ça comme ça, juste pour être sur.

    PS : Je reprécise que la vue fonctionnait correctement à l'origine avec ce code ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CASE WHEN (PCH1.PROJECT IS NOT NULL) THEN PCH1.PROJECT
    	ELSE PCH1.OCRCODE
    END AS [Cost Center Code],
    CASE WHEN (PCH1.PROJECT IS NOT NULL)  THEN OPRJ.PRJNAME
    	ELSE OOCR.OCRNAME
    END AS [Cost Center Name],

  6. #6
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 96
    Points : 63
    Points
    63
    Par défaut
    Je up car je n'ai pas trouvé de solution.

    Je vais essayer de passer via une énième vue (ou requête imbriquée).

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Tu sembles passer par l'interface graphique de création des vues (vu ta capture d'écran)

    Tu dis que ta requete fonctionne...

    As-tu essayé de créer ta vue directement avec un "CREATE VIEW"... ?

  8. #8
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Si je ne m'abuse l'interface graphique de création de vue n'aime pas trop les unions et le fait savoir d'ailleurs?
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  9. #9
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Il n'est pas possible de faire une requete union avec le designer. Il fait l'écrire manuellement.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  10. #10
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 96
    Points : 63
    Points
    63
    Par défaut
    Ah je n'avais pas vu vos messages, mais je viens tout juste de trouver la solution. Je vous la partage.

    Resituons le problème j'avais une requête quasi identique à celle ci dessous. La vue (que j'appelle Racine) s'appuye sur plusieurs autres vues (que j'appelle Branche).

    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
    CREATE VIEW dbo.Vue_Spend_Analysis_Racine
    AS
    SELECT
    	'Cryospace' 	AS [Affiliate Name],
    	''			AS [Sub Affiliate Name],
    	'Ingénierie' 	AS [Business Line],
    	OPCH.CARDNAME 	AS [Supplier Name],
    	''			AS [Supplier Internal/External],
    	[Supplier Address],
    	[Supplier ZIP],
    	[Supplier City],
    	[Supplier Country Code],
    	[Supplier Tax Code],
    	''			AS [Supplier DUNS Code],
    	''			AS [Contract Code],
    	[Invoice Currency],
    	CONVERT(nVARCHAR, OPCH.DOCDATE, 112) 	AS [Invoice Accounting Date],
    	PCH1.LINETOTAL AS [Invoice Line Amount in Currency],
    	PCH1.QUANTITY	AS [Invoice Quantity],
    	''			AS [Invoice Quantity Unit],
    	OPCH.DOCNUM	AS [Invoice Number],
    	PCH1.LINENUM	AS [Invoice Line Number],
    	[Purchase Order Number],
    	[Purchase Order Line Number],
    	OPCH.COMMENTS	 AS [Invoice Line Description],
    	[Purchase Order Line Description],
    	CASE WHEN (([Opex Capex] <> 'OPEX') AND ([Opex Capex] <> 'CAPEX'))  THEN 'OPEX'
    		ELSE [Opex Capex]
    	END AS [Opex Capex bis],
    	OSLP.SLPNAME	AS [Requisitioner Name],
    	PCH1.ITEMCODE	 AS [Air Liquide Article/Service Code],
    	PCH1.DSCRIPTION	AS [Air Liquide Article/Service Name],
    	[Air Liquide Article/Service Group Name],
    	[Supplier Article/Service Code],
    	''			AS [Hermes Code],
    	PCH1.ACCTCODE	 AS [Cost Accounting Code],
    	OACT.ACCTNAME	 AS [Cost Accounting Name],
    	CASE 
    		WHEN PCH1.PROJECT LIKE '' THEN PCH1.OCRCODE
    		WHEN PCH1.PROJECT IS NULL THEN PCH1.OCRCODE
    		ELSE PCH1.PROJECT
    	END AS [Cost Center Code],
    	CASE
    		WHEN PCH1.PROJECT LIKE '' THEN OOCR.OCRNAME
    		WHEN PCH1.PROJECT IS NULL THEN OOCR.OCRNAME
    		ELSE OPRJ.PRJNAME
    	END AS [Cost Center Name],	''			AS [Hermes Mapping Code],
    	YEAR(OPCH.DocDate) AS NumAnnee, 
    	MONTH(OPCH.DocDate) AS NumMois
     
    FROM
    OPCH
    	INNER JOIN Vue_Spend_Analysis_Branche1 AS [BRANCHE1]
    	ON OPCH.CARDCODE = BRANCHE1.CARDCODE
    	INNER JOIN PCH1
    	ON PCH1.DOCENTRY = OPCH.DOCENTRY
    	LEFT OUTER JOIN OSLP
    	ON PCH1.SLPCODE = OSLP.SLPCODE
    	LEFT OUTER JOIN OACT
    	ON PCH1.ACCTCODE = OACT.ACCTCODE
    	LEFT OUTER JOIN OPRJ
    	ON PCH1.PROJECT = OPRJ.PRJCODE
    	LEFT OUTER JOIN OOCR
    	ON PCH1.OCRCODE = OOCR.OCRCODE
    	LEFT OUTER JOIN Vue_Spend_Analysis_Branche2 AS [BRANCHE2]
    	ON PCH1.ITEMCODE = BRANCHE2.ITEMCODE
    	LEFT OUTER JOIN Vue_Spend_Analysis_Branche3 AS [BRANCHE3]
    	ON PCH1.BaseEntry = BRANCHE3.DocEntry AND PCH1.BASELINE = BRANCHE3.LINENUM
    WHERE PCH1.BASETYPE = 22 
     
    UNION
     
    SELECT
    	'Cryospace' 	AS [Affiliate Name],
    	''			AS [Sub Affiliate Name],
    	'Ingénierie' 	AS [Business Line],
    	OPCH.CARDNAME 	AS [Supplier Name],
    	''			AS [Supplier Internal/External],
    	[Supplier Address],
    	[Supplier ZIP],
    	[Supplier City],
    	[Supplier Country Code],
    	[Supplier Tax Code],
    	''			AS [Supplier DUNS Code],
    	''			AS [Contract Code],
    	[Invoice Currency],
    	CONVERT(nVARCHAR, OPCH.DOCDATE, 112) 	AS [Invoice Accounting Date],
    	PCH1.LINETOTAL AS [Invoice Line Amount in Currency],
    	PCH1.QUANTITY	AS [Invoice Quantity],
    	''			AS [Invoice Quantity Unit],
    	OPCH.DOCNUM	AS [Invoice Number],
    	PCH1.LINENUM	AS [Invoice Line Number],
    	[Purchase Order Number],
    	[Purchase Order Line Number],
    	OPCH.COMMENTS	 AS [Invoice Line Description],
    	[Purchase Order Line Description],
    	CASE WHEN (([Opex Capex] <> 'OPEX') AND ([Opex Capex] <> 'CAPEX'))   THEN 'OPEX'
    		ELSE [Opex Capex]
    	END AS [Opex Capex bis],
     
    	OSLP.SLPNAME	AS [Requisitioner Name],
    	PCH1.ITEMCODE 	AS [Air Liquide Article/Service Code],
    	PCH1.DSCRIPTION	AS [Air Liquide Article/Service Name],
    	[Air Liquide Article/Service Group Name],
    	[Supplier Article/Service Code],
    	''			AS [Hermes Code],
    	PCH1.ACCTCODE 	AS [Cost Accounting Code],
    	OACT.ACCTNAME	 AS [Cost Accounting Name],
    	CASE 
    		WHEN PCH1.PROJECT LIKE '' THEN PCH1.OCRCODE
    		WHEN PCH1.PROJECT IS NULL THEN PCH1.OCRCODE
    		ELSE PCH1.PROJECT
    	END AS [Cost Center Code],
    	CASE
    		WHEN PCH1.PROJECT LIKE '' THEN OOCR.OCRNAME
    		WHEN PCH1.PROJECT IS NULL THEN OOCR.OCRNAME
    		ELSE OPRJ.PRJNAME
    	END AS [Cost Center Name],	''			AS [Hermes Mapping Code],
    	YEAR(OPCH.DocDate) AS NumAnnee, 
    	MONTH(OPCH.DocDate) AS NumMois
     
    FROM
    OPCH
    	INNER JOIN Vue_Spend_Analysis_Branche1 AS [BRANCHE1]
    	ON OPCH.CARDCODE = BRANCHE1.CARDCODE
    	INNER JOIN PCH1
    	ON PCH1.DOCENTRY = OPCH.DOCENTRY
    	LEFT OUTER JOIN OSLP
    	ON PCH1.SLPCODE = OSLP.SLPCODE
    	LEFT OUTER JOIN OACT
    	ON PCH1.ACCTCODE = OACT.ACCTCODE
    	LEFT OUTER JOIN OPRJ
    	ON PCH1.PROJECT = OPRJ.PRJCODE
    	LEFT OUTER JOIN OOCR
    	ON PCH1.OCRCODE = OOCR.OCRCODE
    	LEFT OUTER JOIN Vue_Spend_Analysis_Branche2 AS [BRANCHE2]
    	ON PCH1.ITEMCODE = BRANCHE2.ITEMCODE
    	LEFT OUTER JOIN Vue_Spend_Analysis_Branche4 AS [BRANCHE4]
    	ON PCH1.BaseEntry = BRANCHE4.DocEntry AND PCH1.BASELINE = BRANCHE4.LINENUM
    WHERE PCH1.BASETYPE = 20 OR PCH1.BASETYPE = -1
    C'est une requête assez lourde en soi mais elle fonctionne correctement si je l'utilise dans une simple requête.

    Lorsque je l'insère dans l'interface graphique pour modifier ma vue existante ça plante !
    Le message est le suivant :
    Le message d'erreur :



    L'interface graphique de création de vue me rejette uniquement aux endroits om j'utilise des CASE. La source du problème venait bien du UNION mais pas pour les raisons que vous imaginiez.

    Voici ma compréhension du problème : Ma requête se décompose en deux sous requêtes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Requête 1
    UNION
    Requête 2
    Dans ce cas là, Requête 1 et Requête 2 appelle les même tables, vues et champs. Soit je place ma nouvelle requête dans l'interface et celle ci la "traite". C'est à dire qu'elle réécrit la syntaxe comme ça l'arrange (enfin c'est ce que je crois comprendre et c'est ce que je n'avais pas remarqué jusqu'à lors)

    L'interface retraite ma requête entière. Pas de problème elle se rend compte de l'union. Elle décide de mettre en place des alias << _1 >> pour bien distinguer les requêtes l'une de l'autre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select PCH1.DocNum FROM PCH1
    UNION
    Select PCH1_1.DocNum FROM PCH1 AS PCH1_1
    En théorie son traitement semble correct mais elle oublie un passage ! Celui du CASE WHEN. Les alias ne sont donc plus corrects et les identificateurs ne peuvent pas être liés.

    Le code de départ :
    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
    	PCH1.ACCTCODE 	AS [Cost Accounting Code],
    	OACT.ACCTNAME	 AS [Cost Accounting Name],
    	CASE 
    		WHEN PCH1.PROJECT LIKE '' THEN PCH1.OCRCODE
    		WHEN PCH1.PROJECT IS NULL THEN PCH1.OCRCODE
    		ELSE PCH1.PROJECT
    	END AS [Cost Center Code],
    	CASE
    		WHEN PCH1.PROJECT LIKE '' THEN OOCR.OCRNAME
    		WHEN PCH1.PROJECT IS NULL THEN OOCR.OCRNAME
    		ELSE OPRJ.PRJNAME
    	END AS [Cost Center Name],	''			AS [Hermes Mapping Code],
    	YEAR(OPCH.DocDate) AS NumAnnee, 
    	MONTH(OPCH.DocDate) AS NumMois
     
    FROM
    OPCH
    	INNER JOIN Vue_Spend_Analysis_Branche1 AS [BRANCHE1]
    	ON OPCH.CARDCODE = BRANCHE1.CARDCODE
    	INNER JOIN PCH1
    	ON PCH1.DOCENTRY = OPCH.DOCENTRY
    Le code après traitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                          PCH1_1.AcctCode AS [Cost Accounting Code], OACT_1.AcctName AS [Cost Accounting Name], 
                          CASE WHEN PCH1.PROJECT LIKE '' THEN PCH1.OCRCODE WHEN PCH1.PROJECT IS NULL 
                          THEN PCH1.OCRCODE ELSE PCH1.PROJECT END AS [Cost Center Code], 
                          CASE WHEN PCH1.PROJECT LIKE '' THEN OOCR.OCRNAME WHEN PCH1.PROJECT IS NULL 
                          THEN OOCR.OCRNAME ELSE OPRJ.PRJNAME END AS [Cost Center Name], '' AS [Hermes Mapping Code], YEAR(OPCH_1.DocDate) AS NumAnnee, 
                          MONTH(OPCH_1.DocDate) AS NumMois
    FROM         dbo.OPCH AS OPCH_1 INNER JOIN
                          dbo.Vue_Spend_Analysis_Branche1 AS BRANCHE1 ON OPCH_1.CardCode = BRANCHE1.CardCode INNER JOIN
                          dbo.PCH1 AS PCH1_1 ON PCH1_1.DocEntry = OPCH_1.DocEntry

    Le code qu'il fallait (le retraitement du traitement) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                          PCH1_1.AcctCode AS [Cost Accounting Code], OACT_1.AcctName AS [Cost Accounting Name], 
                          CASE WHEN PCH1_1.PROJECT LIKE '' THEN PCH1_1.OCRCODE WHEN PCH1_1.PROJECT IS NULL 
                          THEN PCH1_1.OCRCODE ELSE PCH1_1.PROJECT END AS [Cost Center Code], 
                          CASE WHEN PCH1_1.PROJECT LIKE '' THEN OOCR_1.OCRNAME WHEN PCH1_1.PROJECT IS NULL 
                          THEN OOCR_1.OCRNAME ELSE OPRJ_1.PRJNAME END AS [Cost Center Name], '' AS [Hermes Mapping Code], YEAR(OPCH_1.DocDate) AS NumAnnee, 
                          MONTH(OPCH_1.DocDate) AS NumMois
    FROM         dbo.OPCH AS OPCH_1 INNER JOIN
                          dbo.Vue_Spend_Analysis_Branche1 AS BRANCHE1 ON OPCH_1.CardCode = BRANCHE1.CardCode INNER JOIN
                          dbo.PCH1 AS PCH1_1 ON PCH1_1.DocEntry = OPCH_1.DocEntry
    Alors effectivement si j'étais passé par une commande SQL pour crée la vue ça aurait peut-être marché (je le testerais). En l'occurence comme je suis partit sur l'idée que l'erreur venait de ma requête je suis longtemps resté bloqué.

    En tout cas merci à tous ceux qui ont posté et qui m'ont aidé.

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

Discussions similaires

  1. au moins l'un des arguments ne peut pas être marshalé
    Par thierry007 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/05/2015, 13h16
  2. la mémoire ne peut pas être "written"
    Par zouzou1949 dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 17/12/2006, 14h16
  3. Mémoire ne peut pas être read
    Par tedparker dans le forum Access
    Réponses: 4
    Dernier message: 27/09/2006, 11h54
  4. Liens URL : La mémoire ne peut pas être "read" ?
    Par fredfred dans le forum Windows XP
    Réponses: 4
    Dernier message: 28/07/2006, 08h48
  5. Réponses: 6
    Dernier message: 03/09/2003, 10h29

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