Msg 8114, Niveau 16, État 5, Ligne 1 Erreur de conversion de type de données varchar numérique
Select
CAST(de.ornum AS numeric) + 1 as ornum2
from Cpaym as de
left outer join Cpaym as de1 on CAST(de.ornum AS numeric) = de1.ornum
where ISNUMERIC(de.ornum) = 1
Je vais essayer d'obtenir le manque de numéro de séquence, mais j'ai une erreur
Msg 8114, Niveau 16, État 5, Ligne 1 Erreur de conversion de type de données varchar numérique.
Quelqu'un peut-il m'aider?
Merci de poster votre schéma (structure de la table, des définitions de champ). Regardez les réponses à cette la poste.
désolé, mais je ne peux pas..... la table est déjà rempli... d'un millier de dossiers..et son type de données est en varchar... donc modifier le type de données est hors options... 😀
changement de type de données n'est jamais hors de le options, sauf si quelqu'un vous dit que vous n'avez pas le temps, ou s'il existe quelque 3ème partie en s'appuyant sur les données d'un certain type. Même si vous avez à garder de type varchar, vous pouvez toujours nettoyer les données de sorte qu'il est tout numérique.
ouais.. je n'ai pas le pouvoir de modifier le type de données.... et c'était une erreur humaine quand quelqu'un..pour mettre certains caractères sur un numéro de séquence... -_-
vous pouvez toujours nettoyer les données pour se débarrasser de ces personnages. Je voudrais sérieusement se pencher sur que le. Une base de données ne sera pas très efficace si les données est indésirable (garbage in, garbage out).
désolé, mais je ne peux pas..... la table est déjà rempli... d'un millier de dossiers..et son type de données est en varchar... donc modifier le type de données est hors options... 😀
changement de type de données n'est jamais hors de le options, sauf si quelqu'un vous dit que vous n'avez pas le temps, ou s'il existe quelque 3ème partie en s'appuyant sur les données d'un certain type. Même si vous avez à garder de type varchar, vous pouvez toujours nettoyer les données de sorte qu'il est tout numérique.
ouais.. je n'ai pas le pouvoir de modifier le type de données.... et c'était une erreur humaine quand quelqu'un..pour mettre certains caractères sur un numéro de séquence... -_-
vous pouvez toujours nettoyer les données pour se débarrasser de ces personnages. Je voudrais sérieusement se pencher sur que le. Une base de données ne sera pas très efficace si les données est indésirable (garbage in, garbage out).
OriginalL'auteur Jesun Bicar | 2013-09-26
Vous devez vous connecter pour publier un commentaire.
Vous avez un
CAST()
dans votre prédicat de jointure, qui est évaluée AVANT laWHERE
clause. Side.ornum
n'est pas numérique, cette distribution sera un échec.Aussi,
IsNumeric()
ne pas les attraper tous les types numériques, mais c'est peut-être suffisant dans la plupart des cas. Voici la documentation: http://technet.microsoft.com/en-us/library/ms186272(v=sql.105).aspx et voici l'un des (nombreux) articles décrivant les problèmes avecIsNumeric()
: http://classicasp.aspfaq.com/general/what-is-wrong-with-isnumeric.html.Il ya quelques choses que vous pouvez faire:
ornum
contient un certain nombre dans tous les tableaux qui ont.CASE
expression dans votre prédicat de jointure (lent, mais ça va marcher):... ON CASE WHEN ISNUMERIC(de.ornum) = 1 THEN CAST(de.ornum AS numeric) ELSE NULL END = de1.ornum
Code:
Avez-vous réellement lu la réponse? Deux des trois solutions proposées ne nécessitent pas de modifications de schéma. Il a aussi explique clairement pourquoi la deuxième distribution (à l'intérieur de JOINDRE l'expression) vous donne un problème.
envisager de filtrage de ces personnages, puis la modification du schéma, ou l'ajout d'une nouvelle colonne qui est juste numéros que vous pouvez utiliser pour les jointures et les index. (2) Ma réponse est sur le 2ème jeté. Ce moulage est dans le prédicat de jointure. Voir mon premier paragraphe pour expliquer pourquoi cela ne fonctionne pas.
ouais...j'ai lu pourquoi le 2e cast ne marche pas..n'ai aucune suggestion sur ce point..la cause de l'un des données a "13213."...de sorte qu'il donne l'erreur... lorsque j'essaie de supprimer tous les caractères ...il me donner les données de débordement...
ma deuxième puce et troisième points donner des solutions possibles. Mais sérieusement, essayez de corriger vos données. Le fait que vous avez données non numériques dans ostensiblement colonne numérique va causer problème après problème. Vous pouvez rembourser la dette technique maintenant ou payer plus tard, avec les intérêts.
OriginalL'auteur siride