2010-12-31 6 views
0

Tout d'abord, nous vous souhaitons bonne année. J'ai un problème pour écrire une requête. Pendant l'exécution de ma requête, j'obtiens une erreur.Problème lors de la suppression des valeurs codées en dur à l'aide de la table temporaire

Requête:

select case 

when S.R1 = '6' then 5 

when S.R1 = '7' then 6 

when S.R1 = '8' then 7 

when S.R1 = '9' then 8 

when S.R1 ='10' then 9 

else S.R1 end as Q 

FROM [HelpService].[dbo].[help] s 
----------------------------------------------- 

SELECT [Source], [Score] 

INTO #Temp_Q 

FROM [HelpDesk].[dbo].[Survey] 

WHERE [data_Source Name] = 'Text Data' 

----------------------------------------------- 

select CONVERT(REAL, a.[Dell Score]) as Q 

FROM [HelpService].[dbo].[help] s 

LEFT OUTER JOIN #CE_Temp_Q a on 

s.[R1] = a.[Source] 

erreur

Msg 8114, niveau 16, état 5, Ligne 1

Erreur de conversion type de données varchar réel.

Ce que je suis invité à faire est que j'ai besoin de supprimer les valeurs codées en dur et besoin d'écrire des requêtes avec une table temporaire.

Merci à l'avance, Shashra

+0

Informations insuffisantes. Quel est le lien entre vos 2 requêtes? Lequel donne l'erreur? Quels sont les schémas de vos tables? –

+0

Si l'erreur est dans la première sélection ajouter où isnumeric (s.r1) = 1 à votre première requête – u07ch

+0

@ u07ch - Ce n'est pas garanti pour résoudre le problème SQL Server est libre de faire la conversion d'abord et le filtre plus tard comme par cette question http://stackoverflow.com/questions/3088709/what-is-query-execution-doing-to-this-query-in-sql-server-2005/3088835#3088835 –

Répondre

2

Erreur de conversion type de données varchar réelle

Cela signifie une de vos valeurs contient somthing qui n'est pas un numéro.

Par exemple, le suivant fonctionne très bien

SELECT convert(Real, '1') 
UNION SELECT convert(Real, ' ') 
UNION SELECT convert(Real, NULL) 
UNION SELECT convert(Real, '123.123') 
UNION SELECT convert(Real, ' 456 ') 

Mais un des événements suivants produira la même erreur que vous obtenez

SELECT convert(Real, ' 456 ') 


SELECT CONVERT(Real, '1 2') 

MISE À JOUR

Parfois, il est pas évident que les valeurs du problème sont

la solution suivante pour trouver

SELECT DISTINCT 
     a.[Dell Score] 
FROM 
     [HelpService].[dbo].[help] s 
     LEFT OUTER JOIN #CE_Temp_Q a on 
     s.[R1] = a.[Source] 

OU

SELECT DISTINCT 
     a.[Dell Score], 
     DATALENGTH (a.[Dell Score]) 
    FROM 
     [HelpService].[dbo].[help] s 
     LEFT OUTER JOIN #CE_Temp_Q a on 
     s.[R1] = a.[Source] 
+0

Merci de m'avoir répondu .. Mais Je viens de vérifier que toutes les valeurs envoyées à [DELL SCORE] ne sont que des 'entiers' (1,2,3,4) et des valeurs NULL ("NULL"). – Shahsra

+0

@Shahsra J'ai mis à jour la réponse. Cela devrait aider à identifier les valeurs du problème. BTW Je ne suis pas sûr de ce que l'on entend par les moyens de NULL ("NULL"). Essayez-vous de convertir la chaîne littérale de 4 caractères "NULL" en un réel. Parce que cela ne peut pas être converti en un réel plus que CONVERT (Real, 'Shahsra') peut. –

1

Qu'est-ce que le retour de la requête suivante?

select a.[Dell Score] 
FROM [HelpService].[dbo].[help] s 
LEFT OUTER JOIN #CE_Temp_Q a on 
s.[R1] = a.[Source] 
WHERE a.[Dell Score] like '%[^0-9.]%' 
+0

+1 auquel j'avais pensé en utilisant un pattern matching. –

Questions connexes