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 01/03/2011, 10h17   #1
Invité de passage
 
Inscription : avril 2008
Messages : 65
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 65
Points : 3
Points : 3
Par défaut Erreur de conversion de données à l'exécution d'une SP

Bonjour,

J'ai une erreur quand j'exécute ma procédure stockée du genre :
Citation:
Msg 8114, Level 16, State 5, Procedure G_Ar_la, Line 26
Error converting data type varchar to numeric.
L'erreur pointe sur une ligne au début du code juste après le delete mais elle est vide donc je ne comprends pas la source du problème.

Pourriez-vous m'aider svp ?
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
--- INITILISATION DE VARIABLES ---
 
declare @Cur_M AS int
SELECT  @Cur_M = max(MoId) FROM MSta WHERE Mstacode ='CURRENT'
 
--=== Vidage de la table 
 
DELETE FROM [R-DW].[dbo].[Ar-Tab_1]
 
 
 
--=====
 
 
INSERT  [Ar-Tab_1]
 
SELECT     
            A.[MoId]
           ,A.[ProId]
           ,A.[SitId]
           ,(SUM A.Value) AS value  
           ,'NULL'
           ,'NULL'
           ,'NULL'
           ,'NULL'
           ,GETDATE()
 
FROM Ar_tabl_2  A        JOIN Pro B ON A.ProId = B.ProId
                         JOIN ProG C ON B.ProGId = C.ProGId
                         JOIN PBProG D ON C.PBProGId = D.PBProGId
                         JOIN MTE ON D.MarTId = E.MarTId 
                         JOIN UCcde F ON E.UCdeId = F.UCdeid
 
 
	 WHERE  F.UCde = 'SAS'
     GROUP BY  [MoId]
           ,A.[ProId]
           ,A.[SitId]
xavier81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 10h43   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 950
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 950
Points : 17 769
Points : 17 769
1) Postez l'intégralité de votre SP
2) indentez votre code avec la balise CODE.

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 10h58   #3
Membre Expert
 
Homme
Développeur java, access, sql server
Inscription : octobre 2005
Messages : 851
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Développeur java, access, sql server
Secteur : Industrie

Informations forums :
Inscription : octobre 2005
Messages : 851
Points : 1 302
Points : 1 302
L'erreur semble se produire dans :
Code :
SELECT @Cur_M = max(MoId) FROM MSta WHERE Mstacode ='CURRENT'
donc vérifier que :
MoId est bien de type numérique entier
Mstacode est bien de type varchar ou char
__________________
D'abord qu'il marche. Ensuite qu'il soit rapide. Enfin qu'il soit agréable à utiliser.
First, make it work. Then, make it fast. Finally, make it user-friendly.
Erst, mach', dass es funktioniert. Dann, mach', dass es schnell geht, Zum Schluss mach' es benutzerfreundlich.
Népomucène est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 10h59   #4
Invité de passage
 
Inscription : avril 2008
Messages : 65
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 65
Points : 3
Points : 3
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
ALTER PROCEDURE [dbo].[G_Ar_la]
 
AS
BEGIN
 
 
--- INITILISATION DE VARIABLES ---
 
declare @Cur_M AS int
SELECT  @Cur_M = max(MoId) FROM MSta WHERE Mstacode ='CURRENT'
 
--=== Vidage de la table 
 
DELETE FROM [R-DW].[dbo].[Ar-Tab_1]
 
 
 
--=====
 
 
INSERT  [Ar-Tab_1]
 
SELECT     
            A.[MoId]
           ,A.[ProId]
           ,A.[SitId]
           ,(SUM A.Value) AS value  
           ,'NULL'
           ,'NULL'
           ,'NULL'
           ,'NULL'
           ,GETDATE()
 
FROM Ar_tabl_2  A        JOIN Pro B ON A.ProId = B.ProId
                         JOIN ProG C ON B.ProGId = C.ProGId
                         JOIN PBProG D ON C.PBProGId = D.PBProGId
                         JOIN MTE ON D.MarTId = E.MarTId 
                         JOIN UCcde F ON E.UCdeId = F.UCdeid
 
   WHERE  F.UCde = 'SAS'
     GROUP BY  [MoId]
                 ,A.[ProId]
                 ,A.[SitId]
 
 
end
xavier81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 11h21   #5
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

Quel est le type de la colonne "value" de la table Ar_tabl_2 ? (par ailleurs, ce nom de colonne est mal choisi, car c'est un mot reservé en SQL !)
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 14h18   #6
Invité de passage
 
Inscription : avril 2008
Messages : 65
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 65
Points : 3
Points : 3
bonjour,

j'ai changé le nom du champ value et j'ai toujours la même erreur. le type du champ est decimal pareil que dans la table à charger.
xavier81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 14h31   #7
Membre Expert
 
Homme
Développeur java, access, sql server
Inscription : octobre 2005
Messages : 851
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Développeur java, access, sql server
Secteur : Industrie

Informations forums :
Inscription : octobre 2005
Messages : 851
Points : 1 302
Points : 1 302
Je ne vois pas à quoi sert
Code :
1
2
declare @Cur_M AS int
SELECT  @Cur_M = max(MoId) FROM MSta WHERE Mstacode ='CURRENT'
Puisque @Cur_M n'est pas utilisé dans la suite de la SP

Sinon, il faut vérifier que les types des colonnes qui servent de jointure soient tous compatibles
et examiner aussi les types de colonnes de [Ar-Tab_1] pour ne pas insérer du texte dans une colonne numérique par exemple
__________________
D'abord qu'il marche. Ensuite qu'il soit rapide. Enfin qu'il soit agréable à utiliser.
First, make it work. Then, make it fast. Finally, make it user-friendly.
Erst, mach', dass es funktioniert. Dann, mach', dass es schnell geht, Zum Schluss mach' es benutzerfreundlich.
Népomucène est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 14h34   #8
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
???

et vous arrivez a compiler votre SP avec ceci ?
Code sql :
1
2
 
,(SUM A.Value) AS value

il me semble que
Code sql :
1
2
 
,SUM (A.Value) AS value
conviendrait mieux
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 14h38   #9
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
et aussi :

Code sql :
1
2
 
JOIN MTE ON D.MarTId = E.MarTId

je ne vois pas d'alias E, je suppose que vous vouliez mettre :
Code sql :
1
2
 
JOIN MTE E ON D.MarTId = E.MarTId
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 15h03   #10
Invité de passage
 
Inscription : avril 2008
Messages : 65
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 65
Points : 3
Points : 3
bonjour;

oui mon code se compile bien , c'est lors de la copie que ces erreurs ont survenu sinon il se compile et l'alias E existe bien dans mon code d'origine.
xavier81 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 01/03/2011, 15h10   #11
Membre Expert
 
Homme
Développeur java, access, sql server
Inscription : octobre 2005
Messages : 851
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Développeur java, access, sql server
Secteur : Industrie

Informations forums :
Inscription : octobre 2005
Messages : 851
Points : 1 302
Points : 1 302
Citation:
l'alias E existe bien dans mon code d'origine
ah bon ?
ça serait cool de nous mettre le vrai code ...
__________________
D'abord qu'il marche. Ensuite qu'il soit rapide. Enfin qu'il soit agréable à utiliser.
First, make it work. Then, make it fast. Finally, make it user-friendly.
Erst, mach', dass es funktioniert. Dann, mach', dass es schnell geht, Zum Schluss mach' es benutzerfreundlich.
Népomucène est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 15h11   #12
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 520
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 520
Points : 3 967
Points : 3 967
C'est vraiment la chaine de caractère 'NULL' que vous coulez stocker ?
Ou bien NULL (sans quote) qui indique qu'il n'y a pas de valeur ?
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 15h17   #13
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
Citation:
Envoyé par Népomucène Voir le message
ah bon ?
ça serait cool de nous mettre le vrai code ...
oui, ca nous aiderait à pas se casser le nez en cherchant l'erreur à la ligne 26, dans un code dans lequel... il manque des lignes
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 16h02   #14
Invité de passage
 
Inscription : avril 2008
Messages : 65
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 65
Points : 3
Points : 3
merci
c le null entre cote qui est la source du prob.
donc quand je veux mettre un truc en dure comment dois je faire
xavier81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 16h05   #15
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
Citation:
Envoyé par xavier81 Voir le message
merci
c le null entre cote qui est la source du prob.
donc quand je veux mettre un truc en dure comment dois je faire
Si par "truc", vous entendez NULL, alors mettez simplement NULL :
Code SQL :
1
2
3
 
INSERT INTO MaTable(MaColonne1, MaColonne2, MaColonne3) 
VALUES(1, 'toto', NULL)
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 16h10   #16
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
Dans votre cas, vous devriez même nommer les colonnes que vous voulez renseigner dans votre ordre INSERT, les autres colonnes seront à NULL par defaut (à moins qu'une valeur par défaut soit définie)

Donc spécifiez le nom des 5 colonnes de votre table "Ar-Tab_1" dans votre requête (visiblement, les 4 premières et la dernière), et vous pourrez ainsi vous passer de spécifier ces NULL...
En plus, si l'ordre ou le nombre des colonnes dans cette table changent par l'avenir, votre requête continuera de fonctionner sans problème (sauf bien sur si vous ajoutez une colonne non nullable sans valeur par défaut... )
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/03/2011, 17h02   #17
Invité de passage
 
Inscription : avril 2008
Messages : 65
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 65
Points : 3
Points : 3
j'ai cru qu'en utilisant (insert, select ) est pareil que (insert into, values) dont on doit respecter l'ordre de colonne.
ben je vous remercie bcp
xavier81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 17h10   #18
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 520
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 520
Points : 3 967
Points : 3 967
Citation:
Envoyé par xavier81 Voir le message
j'ai cru qu'en utilisant (insert, select ) est pareil que (insert into, values) dont on doit respecter l'ordre de colonne.
ben je vous remercie bcp
C'est tout à fait vrai...
Mais quand vous aurez passer plusieurs heures à débugger un programme qui se met à planter parce que l'on a rajouter une colonne dans une table, vous comprendrez l'importance d'écrire explicitement le nom des colonnes...
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ 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 14h35.


 
 
 
 
Partenaires

Hébergement Web