2016-04-13 3 views
1

I 2 Datenbanken, die ich freue mich auf, wenn ich diese Abfrage auf beide ausführen, gibt man einen Wert und wirft man einen KonvertierungsfehlerFehler bei der Konvertierung, wenn der varchar Wert in einigen Fällen mit identischen Datenumwandlungs

code_desc ist eine Varchar-Spalte und hat einige Varchars darin

SELECT * 
FROM t_ccs_admin_code 
WHERE code_grp = '50042' AND code_desc = 015105 

ich einen Vergleich auf dem Tisch lief habe t_ccs_admin_code und alle Daten, erscheint über den Datenbanken übereinstimmen. Ich weiß, dass ich das beheben kann, aber an diesem Punkt versuche ich wirklich nur herauszufinden, warum ich das in einer Umgebung und nicht in der anderen bekomme.

+3

laufen Wenn 'code_desc' ein varchar ist, warum Sie den Wert in einen int verglichen werden? –

+0

Ich verstehe, dass es einen besseren Weg gibt, dies zu tun, und ich löse den Code, der das Problem verursacht. Ich versuche nur zu verstehen, warum dies sogar in einer Umgebung funktioniert, wenn die Daten in beiden identisch sind. – Corey

+0

@corey: Sie können versuchen, 'SELECT * FROM t_css_admin_code WHERE code_desc ist nicht NULL und TRY_CONVERT (INT, code_desc) IS NULL 'auf beiden Setups und sehen, ob es nicht konvertierbare Einträge gibt. Auch eines Ihrer Setups kann, sagen wir, einen Index für 'code_grp' haben. Wenn dieser Index verwendet wird und zufällig nur für diese Gruppe keine ungültigen Einträge vorhanden sind, funktioniert die Abfrage möglicherweise auf einem Server und nicht auf einem anderen. – Quassnoi

Antwort

0

Wenn Sie eine Zeichenfolge-Spalte mit einer Zahl vergleichen, versucht SQL Server - besser oder schlechter - die Zeichenfolge in eine Zahl zu konvertieren. Dies ist die Ursache für den Konvertierungsfehler, wenn ein Problem auftritt.

Sie sollten so etwas tun:

code_desc = '015105' 

Oder vielleicht:

code_desc like '%015105%' 

Die Umwandlung von String funktioniert in int, wenn alle Zeichen Ziffern sind - oder auch wenn es Räume in der Anfang oder Ende. Es schlägt jedoch leicht fehl. Sie erhalten also Konvertierungsfehler, wenn eine Zeile einen Wert wie 1.23, a oder 1 1 oder eine Zillion anderer Möglichkeiten enthält.

0

Sie sollten diese Abfrage statt laufen

SELECT * 
FROM t_ccs_admin_code 
WHERE code_grp = '50042' AND cast(code_desc as varchar)='015105' 

Es scheint, dass ein DB die Spalte code_desc als int/numerisch/Bigint hat und andere die gleiche Spalte wie varchar Typ.

Die obige Abfrage wird auf beiden

Verwandte Themen