2015-05-27 25 views
6

Bu seçim beni deli ediyor.
hatadır:CASE bildirimi içinde TSQL NVARCHAR Dönüştürme Hatası

Dönüştürme hatası dönüştürme nvarchar değeri veri türü int '17 .30 saat'.

Veri geçerli:

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

Ve ifadedir:

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

Niçin döküm? –

+2

tüm ifadeyi gösterebilir misin? Orada başarısız olduğundan emin misin? Bu bölümü yorumlamayı deneyin, yine de aynı hatayı alacak mısınız? –

cevap

7

yüzünden örtük dönüştürme bu hatayı alıyorsanız. CASE'un bir bölümü, int'a dönüştürülemeyen ve diğer int, yani DATEPART(DAY,Activitat.Datafi) döndüren NVARCHAR(50), yani CONVERT(NVARCHAR(50), dbo.Activitat.DataManual)'u döndürür.

Böyle bir şey de aynı hatayı döndürecektir.

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

Sen CONVERT gerektiği ve örtülü hiçbir dönüşüm yoktur bu yüzden her iki durumda da NVARCHAR(50) döndürür. Böyle bir şey.

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

Harika yakalama. Düşünmedim bile. –

+0

@Josep Alacid - Sorununuz çözüldüyse, lütfen kabul edilen bir yanıt olarak işaretleyin. – ughai

+0

Ughai gecikme için özür dilerim (aylar, farkındayım). Ama sonunda bitti! –