2015-05-27 10 views
6

Questa selezione mi sta facendo impazzire.
L'errore è:Errore di conversione TSARCH NVARCHAR all'interno dell'istruzione CASE

errore di conversione di valore conversione nvarchar '17 .30 h' a int tipo di dati.

dati è:

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

E l'affermazione è:

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

Dove si esegue il casting su int? –

+2

puoi mostrare l'intera dichiarazione? Sei sicuro che stia fallendo lì? Prova a commentare questa sezione, otterrai lo stesso errore? –

risposta

7

hai trovato questo errore a causa della conversione implicita. Una parte di CASE restituisce NVARCHAR(50), ovvero CONVERT(NVARCHAR(50), dbo.Activitat.DataManual), che non può essere convertito in un int e l'altro restituisce un int, ad esempio DATEPART(DAY,Activitat.Datafi).

Qualcosa di simile restituirà lo stesso errore.

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

Si dovrebbe CONVERT e tornare NVARCHAR(50) in entrambi i casi quindi non c'è conversione implicita. Qualcosa come questo.

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

Grande cattura. Non ci ho nemmeno pensato. –

+0

@Josep Alacid - Se questo problema è stato risolto, contrassegnarlo come risposta accettata. – ughai

+0

Scusate per il ritardo ughai (mesi, ne sono a conoscenza). Ma finalmente fatto! –

Problemi correlati