1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Conversion failed when converting the varchar value '..3' to data type smallint.

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Flosine, 7 August 2019.

  1. Flosine

    Flosine Benutzer

    Guten Morgen Zusammen,

    ich bräuchte da mal dringend eure Hilfe. Ich versuche in unserem ERP System die folgende Abfrage mittels SQL zu generieren:

    Hier der Teilausschnitt:
    , case when astx.STRU_EBENE = '1' Then '1'
    else case when astx.STRU_EBENE = '2' Then '.2'
    else case when astx.STRU_EBENE = '3' Then '..3'
    else case when astx.STRU_EBENE = '4' Then '...4'
    else case when astx.STRU_EBENE = '5' Then '....5'
    else case when astx.STRU_EBENE = '6' Then '.....6'
    else case when astx.STRU_EBENE = '7' Then '......7'
    else astx.STRU_EBENE end end end end end end end as "Ebene"

    Dies soll die Punkte vor den Zahlen sollen optisch die Strukturebene einer Stückliste darstellen, leider habe ich keine möglichkeit das im Frontend des Systems vorzunehmen.

    Das System bringt mir jedoch mit der Abfrage immer die folgende Fehlermeldung:

    Conversion failed when converting the varchar value '..3' to data type smallint.

    Ich hatte schon gehoft z.B. "convert(text, '.2)" verwenden zu können, aber auch das hat nicht funktioniert.

    Hat vielleicht jemand eine Idee. Sollte es keine möglichkeit geben, wäre es nicht schlimm, weil wie gesagt es ist nur rein optisch von nöten, also nice to have.

    Danke für eure Hilfe.
    Gruß
    Florian
     
  2. ukulele

    ukulele Datenbank-Guru

    Ja klar drei Dinge,

    1) In dem Moment wo du mit THEN '1' den vermutlich ersten Datensatz des Selects erzeugst scheint er die Spalte als SMALLINT zu interpretieren. Warum das so ist ist mir nicht ganz klar, denn eigentlich ist mit '' ja klar das es sich um Text handelt und ohne das würde ver eigentlich INT und nicht SMALLINT nehmen. Gibt es vielleicht noch andere Werte an die hier die Saplte irgendwie angehängt wird? Ansonsten probier erstmal
    Code:
    when astx.STRU_EBENE = '1' Then cast('1' AS VARCHAR(10))
    Damit würdest du das Format bestimmen, wenn auch nicht sehr elegant.

    2) Du machst es dir unnötig schwer, die Verschachtelung brauchst du nicht.
    Code:
    CASE WHEN astx.STRU_EBENE = '1' THEN 1 WHEN astx.STRU_EBENE = '2' THEN 2 ELSE 0 END
    geht auch.

    3) Für dein Problem brauchst du nichtmal CASE.
    Code:
    left('..........',cast(astx.STRU_EBENE AS SMALLINT)-1) + astx.STRU_EBENE
    Sollte den passenden String liefern.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden