![]() |
[MSSQL] Problem bei Konvertierung in Case-Verzweigung
hallo Zussamen,
ich sitze gerade an einer etwas größeren SQL-Abfrage, in der es unter anderem ein paar Spalten gibt, bei denen zur gleichen Zeit immer nur eine einen "richtigen" Wert haben kann (die anderen sind Null). Nun möchte ich die Abfrage so gestallten, dass praktisch nur noch eine Spalte gibt, also dass ich sie z.B. durch Case-Verzewigungen zusammenführe.
SQL-Code:
Der Syntax der Abfrage ist soweit in Ordnung (zumindest meckert der SQL Query Analyzer nicht rum), nur versucht der SQL-Server aus irgend einem Grund das Ergebniss der Verzeigung in eine Variabel vom Typ in zu pressen.
Nummer = CASE WHEN dbo.tEingangsrechnung.Eingangsrechnungsnummer IS NOT NULL
THEN dbo.tEingangsrechnung.Eingangsrechnungsnummer ELSE CASE WHEN dbo.tKassenbuchung.Belegnummer IS NOT NULL THEN dbo.tKassenbuchung.Belegnummer ELSE CASE WHEN tEingangsrechnung_1.Eingangsrechnungsnummer IS NOT NULL THEN tEingangsrechnung_1.Eingangsrechnungsnummer ELSE CASE WHEN dbo.tAusgangsrechnung.Ausgangsrechnungsnummer IS NOT NULL THEN dbo.tAusgangsrechnung.Ausgangsrechnungsnummer ELSE CASE WHEN dbo.tDauerauftrag.Dauerauftragsnummer IS NOT NULL THEN dbo.tDauerauftrag.Dauerauftragsnummer ELSE CASE WHEN dbo.tSonstigeZahlungenEinnahmen.SZENummer IS NOT NULL THEN dbo.tSonstigeZahlungenEinnahmen.SZENummer ELSE CASE WHEN dbo.tSonstigeZahlungenAusgaben.SZANummer IS NOT NULL THEN dbo.tSonstigeZahlungenAusgaben.SZANummer ELSE NULL END END END END END END END Zitat:
Vielen Dank und freundliche Grüße, Phill |
Re: [MSSQL] Problem bei Konvertierung in Case-Verzweigung
Versuch es mal mit CAST
|
Re: [MSSQL] Problem bei Konvertierung in Case-Verzweigung
Das habe ich schon probiert, nur weiß ich nicht genau, wie und wo ich das cast anwenden soll...
bei
SQL-Code:
bekomme ich die selbe Fehlermeldung wie vorher, was ja auch logisch ist, denn anscheinend ist ja Nummer vom Typ int.
Nummer = Cast(CASE WHEN dbo.tEingangsrechnung.Eingangsrechnungsnummer... ...END END as NVARCHAR)
und bei
SQL-Code:
bekomme ich den Syntaxfehler
Cast(Nummer = CASE WHEN dbo.tEingangsrechnung.Eingangsrechnungsnummer... ...END END as NVARCHAR)
Zitat:
|
Re: [MSSQL] Problem bei Konvertierung in Case-Verzweigung
SQL-Code:
THEN CAST( tEingangsrechnung_1.Eingangsrechnungsnummer as ...
|
Re: [MSSQL] Problem bei Konvertierung in Case-Verzweigung
Hi,
also wesendlich einfacher geht es so:
SQL-Code:
Dann kannst du auch einfacher casten, wenn immer noch nötig...
Nummer = coalesce( dbo.tEingangsrechnung.Eingangsrechnungsnummer,
dbo.tKassenbuchung.Belegnummer, dbo.tEingangsrechnung_1.Eingangsrechnungsnummer, dbo.tAusgangsrechnung.Ausgangsrechnungsnummer, dbo.tDauerauftrag.Dauerauftragsnummer, dbo.tSonstigeZahlungenEinnahmen.SZENummer, dbo.tSonstigeZahlungenAusgaben.SZANummer, '<alles null>' ) |
Re: [MSSQL] Problem bei Konvertierung in Case-Verzweigung
SQL-Code:
ist auf jeden Fall schon mal sehr schön.. trotzdem kommt immernoch der selbe Fehler. Ein Cast auf die übergebenen Werte ist ja auch eigentlich quatsch, denn der Fehler rührt ja in diesem speziellen Fall daher, dass sich in der Spalte SZANummer, der Tabelle tSonstigeZahlungenAusgaben in irgendeiner Zeile der nvarchar-Wert 'SZA000759' befindet. Ihn noch ein mal in NVARCHAR zu Casten wäre dann ja 'doppelt gemoppelt' und führt zwangsläufig zu dem selben Fehler. Es muss doch irgendwie möglich sein, anzugeben, dass Nummer vom typ nvarchar ist und nicht, wie der Server aus welchem Grund auch immer annimmt, dass es sich um einen den typ int handelt, oder?!
coalesce
EDIT: Hier mal meine gesammte abfrage, ich sehe zwar keinen Fehler, aber vielleicht habe ich irgendetwas anderes falsch gemacht?!
SQL-Code:
SELECT TOP 100 PERCENT dbo.sUmbuchung_Anteil.*, COALESCE (tEingangsrechnung_1.Eingangsrechnungsnummer, dbo.tKassenbuchung.Belegnummer,
tEingangsrechnung_1.Eingangsrechnungsnummer, dbo.tAusgangsrechnung.Ausgangsrechnungsnummer, dbo.tDauerauftrag.Dauerauftragsnummer, dbo.tSonstigeZahlungenEinnahmen.SZENummer, dbo.tSonstigeZahlungenAusgaben.SZANummer, NULL) AS Eingangsrechnungsnummer, tKontenbuchung.Betrag AS RechnungBetrag, tKontenbuchung.Verwendung AS RechnungVerwendung, tKontenbuchung.Zahlungsempfaenger AS RechnungZahlungsempfaenger, tKontenbuchung.Buchungsdatum AS RechnungBuchungsdatum, dbo.tKontenbuch.PK_tKontenbuch AS PK_tKontenbuchRechnung FROM dbo.tSonstigeZahlungenAusgaben RIGHT OUTER JOIN dbo.sUmbuchung_Anteil ON dbo.tSonstigeZahlungenAusgaben.PK_tSonstigeZahlungenAusgaben = dbo.sUmbuchung_Anteil.FK_tSonstigeZahlungenAusgaben LEFT OUTER JOIN dbo.tSonstigeZahlungenEinnahmen ON dbo.sUmbuchung_Anteil.FK_tSonstigeZahlungenEinnahmen = dbo.tSonstigeZahlungenEinnahmen.PK_tSonstigeZahlungenEinnahmen LEFT OUTER JOIN dbo.tAusgangsrechnung ON dbo.sUmbuchung_Anteil.FK_tAusgangsrechnung = dbo.tAusgangsrechnung.PK_tAusgangsrechnung LEFT OUTER JOIN dbo.tDauerauftrag ON dbo.sUmbuchung_Anteil.FK_tDauerauftrag = dbo.tDauerauftrag.PK_tDauerauftrag LEFT OUTER JOIN dbo.tEingangsrechnung tEingangsrechnung_1 ON dbo.sUmbuchung_Anteil.FK_tEingangsrechnung = tEingangsrechnung_1.PK_tEingangsrechnung LEFT OUTER JOIN dbo.tKassenbuchung ON dbo.sUmbuchung_Anteil.FK_Kassenbuchung = dbo.tKassenbuchung.PK_tKassenbuchung LEFT OUTER JOIN dbo.tKonto INNER JOIN dbo.tKontenbuch ON dbo.tKonto.PK_tKonto = dbo.tKontenbuch.FK_tKonto INNER JOIN dbo.tKontenbuchung tKontenbuchung ON dbo.tKontenbuch.PK_tKontenbuch = tKontenbuchung.FK_tKontenbuch ON dbo.sUmbuchung_Anteil.FK_tKontenbuchung = tKontenbuchung.PK_tKontenbuchung LEFT OUTER JOIN dbo.tEingangsrechnung tEingangsrechnung_2 INNER JOIN dbo.tRechnung_Teilzahlung INNER JOIN dbo.tKontenbuchung_Rechnung ON dbo.tRechnung_Teilzahlung.PK_tRechnung_Teilzahlung = dbo.tKontenbuchung_Rechnung.FK_tRechnung_Teilzahlung INNER JOIN dbo.tRechnung ON dbo.tRechnung_Teilzahlung.FK_tRechnung = dbo.tRechnung.PK_tRechnung ON tEingangsrechnung_2.FK_tRechnung = dbo.tRechnung.PK_tRechnung ON tKontenbuchung.PK_tKontenbuchung = dbo.tKontenbuchung_Rechnung.FK_tKontenbuchung ORDER BY tEingangsrechnung_1.Eingangsrechnungsnummer |
Re: [MSSQL] Problem bei Konvertierung in Case-Verzweigung
Hi,
SQL-Code:
Nummer = convert(nvarchar,
coalesce( dbo.tEingangsrechnung.Eingangsrechnungsnummer, dbo.tKassenbuchung.Belegnummer, dbo.tEingangsrechnung_1.Eingangsrechnungsnummer, dbo.tAusgangsrechnung.Ausgangsrechnungsnummer, dbo.tDauerauftrag.Dauerauftragsnummer, dbo.tSonstigeZahlungenEinnahmen.SZENummer, dbo.tSonstigeZahlungenAusgaben.SZANummer, '<alles null>' ) ) |
Re: [MSSQL] Problem bei Konvertierung in Case-Verzweigung
nö... löst das Problem ebenso nicht.
|
Re: [MSSQL] Problem bei Konvertierung in Case-Verzweigung
Jedes einzelne Argument muss auf NVarChar gecastet werden, also so etwa:
SQL-Code:
Ich vermute mal, das das erste Argument vom Typ INT ist und MSSQL dann alle weiteren Argumente implizit in eben dieses INT konvertieren will.
coalesce (cast (Field1 as NVarChar),cast (Field2 as NVarChar), ...)
|
Re: [MSSQL] Problem bei Konvertierung in Case-Verzweigung
Hier mein Vorschlag...
SQL-Code:
Gruss
SELECT @Nummer = COALESCE(
CONVERT(VARCHAR, dbo.tEingangsrechnung.Eingangsrechnungsnummer), CONVERT(VARCHAR, dbo.tKassenbuchung.Belegnummer), CONVERT(VARCHAR, tEingangsrechnung_1.Eingangsrechnungsnummer), CONVERT(VARCHAR, dbo.tAusgangsrechnung.Ausgangsrechnungsnummer), CONVERT(VARCHAR, dbo.tDauerauftrag.Dauerauftragsnummer), CONVERT(VARCHAR, dbo.tSonstigeZahlungenEinnahmen.SZENummer), CONVERT(VARCHAR, dbo.tSonstigeZahlungenAusgaben.SZANummer) ) Thorsten PS: ich weiss, jetzt geht wieder der CONVERT-Schnack los... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz