2015-05-27 17 views
6

Diese Auswahl macht mich verrückt.
Der Fehler ist:TSQL NVARCHAR Konvertierungsfehler in CASE-Anweisung

Konvertierungsfehler Umwandlung nvarchar Wert '17 .30 h‘Datentyp Int.

Daten sind:

(DateTime) (Nvarchar) (DateTime) 
DATAINICI DATAMANUAL DATAFI 
null   17.30 h  10/01/2015 
01/01/2015 20.30 h  null 

Und die Aussage ist:

CASE WHEN dbo.Activitat.DataInici is null 
THEN DATEPART(DAY,Activitat.Datafi) 
ELSE CONVERT(NVARCHAR(50), dbo.Activitat.DataManual) 
END 
+3

Wo wird in int gegossen? –

+2

können Sie die ganze Aussage zeigen? Bist du sicher, dass es dort versagt? Versuchen Sie, diesen Abschnitt zu kommentieren, erhalten Sie immer noch den gleichen Fehler? –

Antwort

7

Du diesen Fehler wegen impliziter Konvertierung. Ein Teil von CASE liefert NVARCHAR(50), d. H. CONVERT(NVARCHAR(50), dbo.Activitat.DataManual), der nicht in einen int umgewandelt werden kann, und der andere gibt einen int, d. H. DATEPART(DAY,Activitat.Datafi) zurück.

So etwas wird auch den gleichen Fehler zurückgeben.

SELECT CASE WHEN 1=2 THEN 1 ELSE 'errorstring' END 

Sie sollten CONVERT und zurück NVARCHAR(50) in beiden Fällen so gibt es keine implizite Konvertierung ist. Etwas wie das.

CASE WHEN dbo.Activitat.DataInici is null 
THEN CONVERT(NVARCHAR(50),DATEPART(DAY,Activitat.Datafi)) 
ELSE CONVERT(NVARCHAR(50), dbo.Activitat.DataManual) 
END 
+2

Großer Fang. Dachte nicht einmal daran. –

+0

@Josep Alacid - Wenn dies Ihr Problem gelöst hat, markieren Sie es als akzeptierte Antwort. – ughai

+0

Sorry für die Verzögerung ughai (Monate, ich bin mir bewusst). Aber endlich fertig! –