2010-12-31 3 views
0

Zunächst einmal wünsche ich Ihnen alles Gute zum neuen Jahr. Ich habe ein Problem beim Schreiben von Abfragen. Während der Ausführung meiner Abfrage wird ein Fehler angezeigt.Problem beim Entfernen von hartcodierten Werten mit Hilfe der Temp-Tabelle

Abfrage:

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] 

ERROR

Msg 8114, Ebene 16, Status 5, Zeile 1

Fehlerdatentyp varchar auf reale Umwandlung.

Was ich gefragt werden, ist, muss ich die hart codierten Werte entfernen und müssen Abfragen mit einer temporären Tabelle schreiben.

Vielen Dank im Voraus, Shashra

+0

Nicht genügend Informationen. Was ist die Verbindung zwischen Ihren 2 Abfragen? Welcher gibt den Fehler? Was sind die Schemata deiner Tabellen? –

+0

Wenn der Fehler in der ersten ist, fügen Sie hinzu wo isnumeric (s.r1) = 1 zu Ihrer ersten Abfrage – u07ch

+0

@ u07ch - Das ist nicht garantiert, um das Problem zu lösen SQL Server ist frei, die Konvertierung zuerst und der Filter später als pro diese Frage http://stackoverflow.com/questions/3088709/what-isquery-execution-doing-to-this-query-in-sql-server-2005/3088835#3088835 –

Antwort

2

Fehler beim Konvertieren Datentyp varchar auf reale

Dies bedeutet eine Ihrer Werte Somthing enthält, die nicht eine Zahl ist.

Zum Beispiel folgendes funktioniert

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

Aber eine der folgenden werden die gleichen Fehler ergeben Sie

SELECT convert(Real, ' 456 ') 


SELECT CONVERT(Real, '1 2') 

UPDATE

Manchmal bekommen es ist nicht so offensichtlich, was die Problemwerte sind

Versuchen Sie, die folgenden es Rückkehr

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

ODER

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

Danke für die Antwort auf mich .. Aber Ich habe nur überprüft, dass alle Werte, die zu [DELL SCORE] gehören, nur 'Integer' (1,2,3,4) sind und NULL bedeutet ("NULL"). – Shahsra

+0

@Shahsra Ich habe die Antwort aktualisiert. Dies sollte helfen, die Problemwerte zu identifizieren. Übrigens bin ich mir nicht sicher, was mit NULL gemeint ist ("NULL"). Versuchen Sie die wörtliche 4-stellige Zeichenkette "NULL" in eine reale umzuwandeln. Denn das kann nicht mehr zu einem echten umgewandelt werden als CONVERT (Real, 'Shahsra'). –

1

Was tut die folgende Abfrage zu finden?

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, die ich mit Mustererkennung gedacht hatte. –

Verwandte Themen