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

Filtr dodawania SQL tylko wtedy, gdy zmienna nie jest pusta

Możesz przetłumaczyć swoje wymagania na :

SELECT  route_id [ROUTE_ID]
FROM route_master(NOLOCK)
WHERE  route_ou = 2
AND   (@l_s_query is null OR route_query = @l_s_query)
AND   lang_id  = 1
OPTION (RECOMPILE)

OPTION (RECOMPILE) jest opcjonalne, ale może zapewnić lepsze plany wykonania kosztem dodatkowego czasu kompilacji, jak omówiono w artykule kanonicznym na ten temat Dynamiczne warunki wyszukiwania w T‑SQL

Lub za pomocą COALESCE() aby uniknąć OR :

WHERE  route_ou = 2
AND   COALESCE(@l_s_query,route_query) = route_query 
AND   lang_id  = 1

Uwaga: Jak powiedział @jarlh, jeśli route_query jest dopuszczalna, może to powodować pewne problemy z powodu porównania wartości null, więc możesz użyć pierwszego zapytania.

Inną opcją są dwa oddzielne zapytania przy użyciu UNION ALL , po jednym dla każdego warunku -

SELECT .. FROM .. 
WHERE @l_s_query IS NULL
UNION ALL
SELECT .. FROM .. 
WHERE @l_s_query = route_query

Jeśli chodzi o wydajność, tylko ostatni użyje indeksu, uważam, że pierwszy będzie najszybszy, ale może się to zmienić w zależności od indeksów, rozmiarów tabel itp.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wykonaj procedurę składowaną SQL Server z parametrem wejściowym

  2. grupowanie po zmianie statusu

  3. Jak usunąć zadanie agenta programu SQL Server w Azure Data Studio

  4. oddziel wartości oddzielone przecinkami i przechowuj w tabeli na serwerze sql

  5. Pokaż zaawansowane opcje konfiguracji serwera w SQL Server (T-SQL)