sql server-FALL: Fehler beim konvertieren von Datentyp varchar float
Ich versuche, fügen Sie eine Spalte dynamisch in meiner Abfrage.
Bin ich mit der folgenden Abfrage:
DECLARE @detMethod varchar(20) = 'MAX(cov)';
WITH myTable as (
SELECT user1, (SELECT CASE @detMethod
WHEN 'MAX(cov)' THEN MAX(cov)
ELSE MAX(pcc*cov)
END
) as method
FROM ....
WHERE ....
)
/* some task on myTable */
Es ist mir ein Fehler in dieser Zeile:
SELECT user1, (SELECT CASE @detMethod
Error converting data type varchar to float.
Eine mögliche Alternative ist die Verwendung von dynamischem sql, und speichern Sie die gesamte Abfrage in einem string, und führen Sie dann mithilfe von sp_executesql. Aber was genau ist falsch an diesem code?
Edit: Der code ist in Ordnung, der Fehler war weiter unten in der query in der FROM-Klausel where-ich hatte nicht eingeschlossen @detMethod innerhalb der CASE-block. Die Fehler-Zeilennummer, es war mir war die erste Zeile der abgeleiteten Tabelle.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehe ich zwei Möglichkeiten:
cov
undpcc
hat einen Datentyp, dervarchar
und Werte enthält, die nicht konvertiert werden, umfloat
;Ihre Muster der Platzierung der
CASE
- Anweisung in einemSELECT
ist unnötig, aber es ist nicht das, was den Fehler verursacht. Sie vereinfachen so:Beachten Sie, dass es ist nichts falsch mit der Verwendung der alternativen Kurzform des
CASE
- Anweisung, die Sie gewählt haben, die wie folgt aussieht:Solange Sie Tests für Gleichheit, dann die vollständige syntax ist nicht erforderlich. Wenn Sie die Ungleichheit oder testen müssen, die für
NULL
oder verwenden Sie einen anderen Ausdruck in einigen Fällen, dann natürlich müssen Sie verwenden die erweiterte form:Aber wieder, dies sollte keine Auswirkungen auf Ihre situation.
Letzte, wenn Ihr Ausdruck immer verwendet
Max
, berücksichtigen, die weitere Vereinfachung etwa so:Oder sogar (besser ausdrücklichen Absicht, um die nächsten Entwickler):
float
Spalte mit einemNULL
Wert konvertiert werden, umvarchar
wenn es nichts auslösen, eine solche implizite Umwandlung?