Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

не може да предаде стойност като float

По отношение на последващата ви мисъл.

SQL Server 2012 въвежда TRY_CONVERT за тази нужда. Така че следната заявка ще върне NULL а не грешка.

SELECT TRY_CONVERT ( FLOAT, 'Fish')

Няма гаранция дори при серийни планове, че WHERE клаузата ще се случи преди SELECT се оценява. Както е обяснено в тази публикация в блог от SQL Server 2005 нататък това е по-вероятно да се случи, отколкото в предишните версии. Промени в поведението на функциите на Database Engine в SQL Сървър 2005 конкретно извиква това по следния начин.

Повече дискусии за това поведение има в друга добра публикация в блог от Крейг Фридман Конвертиране и аритметични грешки .

Във версии преди 2012 г. и TRY_CONVERT трябва да обвиете CAST AS FLOAT в CASE изявление. напр.

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

Това все още не е абсолютно гарантирано, за да предотврати получаването на грешки като ISNUMERIC сам по себе си просто проверява дали стойността ще бъде прехвърлена към един от числовите типове данни, а не конкретно към плаващ Пример за въвеждане, което би било неуспешно, е '.'

CASE е документиран като предимно късо съединение в книги онлайн (някои изключения се обсъждат тук )

Можете също да намерите допълнителни дискусии/жалби за това в елемента за свързване SQL Server не трябва да предизвиква нелогични грешки и добро обяснение на подобен проблем от SQLKiwi



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ако искам да намеря какво препраща към обект в SQL Server, изчерпателно ли е търсенето на syscomments?

  2. Принуждаване на първо код винаги да инициализира несъществуваща база данни?

  3. Лоши навици:Избягване на NULL в SQL Server

  4. TSQL Опитайте/Уловете в рамките на транзакция или обратно?

  5. Избягване на блокиране чрез използване на подсказка NOLOCK