Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

impossibile lanciare valore come float

Riguardo al tuo ripensamento.

SQL Server 2012 introduce TRY_CONVERT per questa esigenza. Quindi la seguente query restituirebbe NULL piuttosto che un errore.

SELECT TRY_CONVERT ( FLOAT, 'Fish')

Non vi è alcuna garanzia nemmeno con i piani seriali che il WHERE si verificherà prima di SELECT viene valutato. Come spiegato in questo post del blog da SQL Server 2005 in poi è più probabile che ciò accada rispetto alle versioni precedenti. Le Modifiche al comportamento delle funzionalità di Motore di database in SQL Server 2005 lo chiama specificamente come segue.

Ulteriori discussioni su questo comportamento si trovano in un altro buon post sul blog di Craig Freedman Errori di conversione ed aritmetici .

Nelle versioni precedenti al 2012 e TRY_CONVERT devi avvolgere il CAST AS FLOAT in un CASE dichiarazione. es.

  SELECT CASE WHEN ISNUMERIC(Col)=1 THEN CAST(Col AS FLOAT) END AS Col
  FROM Table
  WHERE ISNUMERIC(Col)=1

Questo non è ancora assolutamente garantito per evitare di ricevere errori come ISNUMERIC controlla semplicemente che il valore venga eseguito il cast a uno dei tipi di dati numerici anziché in modo specifico per float Un esempio di input che non riuscirebbe è '.'

CASE è documentato per lo più cortocircuito nei libri online (alcune eccezioni sono discusse qui )

Puoi anche trovare ulteriori discussioni/reclami al riguardo nell'elemento di connessione SQL Server non deve generare errori illogici e un buona spiegazione di un problema simile di SQLKiwi