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

IsNumeric в SQL Server JOIN

Не можете да разчитате на реда, в който базата данни ще оцени филтриращите изрази. Има оптимизатор на заявки, който ще оцени вашия SQL и ще изгради план за изпълнение на заявката въз основа на това, което възприема, че ще доведе до най-добра производителност .

В този контекст, IsNumeric() не може да се използва с индекс и означава изпълнение на функция срещу всеки ред в таблицата. Следователно почти никога няма осигуряват най-доброто възприемано представяне. Сравнете това с SrcID > 15 израз, който може да бъде съпоставен с индекс (ако съществува такъв) и е просто израз на единичен оператор, дори ако такъв не съществува. Може също да се използва за филтриране на броя потенциални редове, където IsNumeric() функцията трябва да се изпълни.

Вероятно можете да заобиколите това с изглед, подзаявка, CTE, оператор CASE или изчислена колона. Ето пример за CTE:

With NumericOnly As 
(
    SELECT <columns> FROM MyTable WHERE IsNumeric(SrcID) = 1
)
SELECT <columns> FROM NumericOnly WHERE SrcID > 15

И ето опция за оператор CASE:

SELECT <columns> FROM MyTable WHERE CASE WHEN IsNumeric(SrcIC) = 1 THEN Cast(SrcID As Int) ELSE 0 END > 15


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка 40 на доставчика с име pipes не можа да отвори връзка към грешка 2 на SQL Server

  2. Защо точността намалява при умножаване на сумата на друго число

  3. Преглед на мисии Най-новата услуга за наблюдение на база данни - Spotlight Cloud

  4. Хеширане на парола в SQL

  5. сравняване на колона със списък със стойности в t-sql