Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

IsNumeric w SQL Server DOŁĄCZ

Nie możesz liczyć na kolejność, w jakiej baza danych będzie oceniać wyrażenia filtrujące. Istnieje optymalizator zapytań, który oceni Twój kod SQL i zbuduje plan wykonania zapytania na podstawie tego, co postrzega, co zapewni najlepszą wydajność .

W tym kontekście IsNumeric() nie może być używany z indeksem, a to oznacza uruchamianie funkcji dla każdego wiersza w tabeli. Dlatego prawie nigdy zapewniają najlepszą postrzeganą wydajność. Porównaj to z SrcID > 15 wyrażenie, które może być dopasowane do indeksu (jeśli taki istnieje) i jest tylko wyrażeniem z jednym operatorem, nawet jeśli tak nie jest. Może być również używany do filtrowania liczby potencjalnych wierszy, w których IsNumeric() funkcja musi działać.

Prawdopodobnie możesz obejść ten problem za pomocą widoku, podzapytania, CTE, instrukcji CASE lub kolumny obliczeniowej. Oto przykład CTE:

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

A oto opcja instrukcji 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. Domyślna nazwa instancji SQL Server Express

  2. Wczytaj dowolny JSON na listę par klucz-wartość (format EAV) w SQL Server

  3. Skomplikowane zapytanie SQL — znajdowanie elementów pasujących do wielu różnych kluczy obcych

  4. Automatycznie generuj wartość hierarchii

  5. Jak mogę WYBRAĆ wiele kolumn w ramach przypadku, gdy na serwerze SQL Server?