Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/01/2011, 15h06   #1
Nouveau Membre du Club
 
Inscription : juin 2009
Messages : 90
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 90
Points : 32
Points : 32
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 :
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 :
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 :
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 !
Cryos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2011, 15h50   #2
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 665
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

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

Informations forums :
Inscription : janvier 2005
Messages : 4 665
Points : 8 707
Points : 8 707
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.

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2011, 16h03   #3
Nouveau Membre du Club
 
Inscription : juin 2009
Messages : 90
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 90
Points : 32
Points : 32
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 :
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
Cryos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2011, 16h12   #4
Rédacteur/Modérateur

 
Avatar de WOLO Laurent
 
Homme Laurent WOLO
Architecte de base de données
Inscription : mars 2003
Messages : 2 696
Détails du profil
Informations personnelles :
Nom : Homme Laurent WOLO
Âge : 35
Localisation : Congo-Brazzaville

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

Informations forums :
Inscription : mars 2003
Messages : 2 696
Points : 3 917
Points : 3 917
Envoyer un message via Yahoo à WOLO Laurent
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 !
WOLO Laurent est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2011, 16h37   #5
Nouveau Membre du Club
 
Inscription : juin 2009
Messages : 90
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 90
Points : 32
Points : 32
Mes tables sont déclarés de cette façon :
Code :
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 :
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],
Cryos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 09h14   #6
Nouveau Membre du Club
 
Inscription : juin 2009
Messages : 90
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 90
Points : 32
Points : 32
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).
Cryos est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 28/01/2011, 10h44   #7
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
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"... ?
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 15h07   #8
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
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?
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 11h35   #9
Rédacteur/Modérateur

 
Avatar de WOLO Laurent
 
Homme Laurent WOLO
Architecte de base de données
Inscription : mars 2003
Messages : 2 696
Détails du profil
Informations personnelles :
Nom : Homme Laurent WOLO
Âge : 35
Localisation : Congo-Brazzaville

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

Informations forums :
Inscription : mars 2003
Messages : 2 696
Points : 3 917
Points : 3 917
Envoyer un message via Yahoo à WOLO Laurent
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 !
WOLO Laurent est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 16h42   #10
Nouveau Membre du Club
 
Inscription : juin 2009
Messages : 90
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 90
Points : 32
Points : 32
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 :
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 :
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 :
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 :
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 :
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 :
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é.
Cryos est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h34.


 
 
 
 
Partenaires

Hébergement Web