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

Flosine

Benutzer
Beiträge
10
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
 
Werbung:
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.
 
Zurück
Oben