2016-04-21 6 views
0

ich diese Legacy-Code haben, die andernfalls gestartet ...Konvertierung fehlgeschlagen beim Konvertieren des Nvarchar-Werts '7575932.' den Datentyp int

UPDATE B2C 
SET B2C.dborderid = A.order_number__c 
FROM b2csf B2C 
JOIN Alemania A ON B2C.actualid = A.salesforce_id 

bekomme ich diesen Fehler:

Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the nvarchar value '7201799-' to data type int.

Ich ging weiter und verändert es an:

UPDATE B2C 
SET B2C.dborderid = (CASE 
         WHEN Isnumeric (a.order_number__c) = 1 
          THEN CAST(a.order_number__c AS INT) 
        END) 
FROM b2csf B2C 
JOIN Alemania A ON B2C.actualid = A.salesforce_id 

Und Jetzt bekomme ich

Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the nvarchar value '7575932.' to data type int.

Meine Fragen sind nun:

  • wie kann ich diesen Fehler zu vermeiden? Es macht mir nichts aus, zum Beispiel "7575932" zu verlieren. Wert. (Im Idealfall würde Ich mag ‚7575932.‘ Wert verwerfen)

  • Ich versuche mein Bestes, Best Practices zu folgen ... ist die Spalte DBorderid zu nvarchar die einzigen „best practice“ Alternative zu ändern?

(Ich bin mit SQL Server 2008)

Antwort

1

Statt ... WHEN Isnumeric (a.order_number__c) = 1 ... Verwendung ... WHEN Isnumeric (a.order_number__c + '.0e0') = 1 ...

+0

es funktioniert großartig, danke, jetzt erhalte ich: Msg 248, Ebene 16, Status 1, Zeile 2 Bei der Konvertierung des Nvarchar-Wertes '3545427103' ist eine int-Spalte übergelaufen. Die Anweisung wurde beendet. Gibt es eine Inline-elegante/Best-Practice-Lösung? – Chicago1988

+0

@ Chicago1988 wie wäre es mit dieser zusätzlichen Bedingung 'Fall bei Besetzung ('3545427103' als numerisch (38,0)) zwischen -2147483648 und 2147483648 dann ...' – Max

+0

klingt gut, aber schlechte Daten werden kommen ... So ist es wird irgendwann wieder scheitern ... Ich kann nicht glauben, dass ich keine Lösung für diese einfache Sache finden kann ... – Chicago1988

Verwandte Themen