2010-09-29 19 views
0

tout le monde après-midi,Problèmes de conversion NVARCHAR à ENTIER dans SQL Server 2005 Express

Je vais avoir quelques problèmes de conversion un calcul en ENTIER! Essentiellement j'ai le calcul;

CAST(ROUND(SQRT(SQUARE(69.1*(CAST(tblPostCode.PCLat AS DECIMAL(30,15)) - "& 53.078282 &")) + SQUARE(69.1 * (CAST(tblPostCode.PCLng AS DECIMAL(30,15)) - "& -2.271495 &") * COS(CAST(tblPostCode.PCLat AS DECIMAL(30,15))/57.3))),0) AS INTEGER) 

(Il calcule la distance entre la longitude et latitude de codes postaux)

Maintenant, je peux utiliser cette valeur dans l'instruction SELECT et ISNUMERIC() de la sortie renvoie true!

Cependant, quand j'essayer de limiter cette valeur dans les états où, WHERE .... <= 150, je reçois un retour « Erreur de conversion NVARCHAR à integer » message.

Quelqu'un peut-il aider? J'ai essayé CONVERT et CAST et si j'ajoute le WHERE ISNUMERIC(...) = 1 limité je n'obtiens aucune valeur de rendement!

Toute aide est appréciée

Cordialement Pete W

+0

Quel est le code dans ...? – EFraim

+4

Les trucs '-" et -2.271495 & "' sont complètement invalides. Pouvez-vous poster du code qui s'exécute? Edit: A moins que vous n'ayez une colonne appelée '& -2.271495 &'? –

+0

Pouvez-vous fournir la structure de la table et des exemples de données avec le problème? –

Répondre

0

J'ai remplacé vos références de table (tblPostCode.PCLng, tblPostCode.PCLat) avec des valeurs constantes (5 et 6) pour tester votre requête. Comme Martin Smith l'a déjà mentionné dans son commentaire, l'expression entre guillemets est complètement invalide. Est-ce une relique d'une ancienne requête peut-être? Qu'est-ce que sql essaie de convertir l'expression en entier qui échoue en raison des "&" entre guillemets. Si vous supprimez les marques et garder les valeurs constantes, il a fonctionné pour moi:

SELECT CAST(ROUND(SQRT(SQUARE(69.1 
           * (CAST(5 AS DECIMAL(30, 15)) 
            - 53.078282)) + SQUARE(69.1 
                   * (CAST(6 AS DECIMAL(30, 
                   15)) 
                   - 2.271495) 
                   * COS(CAST(5 AS DECIMAL(30, 
                   15))/57.3))), 
        0) AS INTEGER) 

Le résultat est:

3332 
+1

?? Donner des raisons pour votre anormal "& -2.271495 &" serait beaucoup plus utile. – JanW

+0

Oui, vous avez raison, le "& &" était moi copier et coller mon code ASP. Bizarrement la requête va s'exécuter, produisant la distance entre les deux ensembles de lat/longs, cependant quand j'essaie d'utiliser le calcul pour trouver un membre qui habite <200 miles, la requête produit tous les membres qui vivent moins alors À 200 milles de là, ALORS passe au prochain membre qui ne le fait pas et lève l'erreur! "SELECT .. [le calcul]" = fonctionne bien "SELECT .. [le calcul]" ... O WH [le calcul]

+0

Merci beaucoup, le numéro est maintenant trié. Disparité de type de données dans le schéma db –