2015-05-27 12 views
6

Ten wybór doprowadza mnie do szału.
Błąd jest:Konwersja TSQL NVARCHAR Error wewnątrz instrukcji CASE

Błąd konwersji wartości konwersji nvarchar '17 0,30 h”int typ danych.

danych jest:

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

A jest stwierdzenie:

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

Gdzie jest casting do int? –

+2

Czy możesz pokazać całe oświadczenie? Jesteś pewien, że tam zawodzi? Spróbuj skomentować tę sekcję, czy nadal będziesz mieć ten sam błąd? –

Odpowiedz

7

Otrzymujesz ten błąd z powodu niejawna konwersja. Jedna część z CASE zwraca NVARCHAR(50), tj. CONVERT(NVARCHAR(50), dbo.Activitat.DataManual), która nie może być przekształcona w int, a druga zwraca wartość int, tj. DATEPART(DAY,Activitat.Datafi).

Coś podobnego również zwróci ten sam błąd.

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

Powinieneś CONVERT i powrócić NVARCHAR(50) w obu przypadkach tak nie jest niejawna konwersja. Coś takiego.

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

Świetny połów. Nawet o tym nie myślałem. –

+0

@Josep Alacid - Jeśli to rozwiązało problem, proszę oznaczyć go jako zaakceptowaną odpowiedź. – ughai

+0

Przepraszam za opóźnienie ughai (miesiące, jestem świadomy). Ale w końcu zrobione! –

Powiązane problemy