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

Procedura składowana T-SQL, która akceptuje wiele wartości identyfikatorów

Erland Sommarskog podtrzymał autorytatywną odpowiedź na to pytanie przez ostatnie 16 lat:Tablice i listy w SQL Server .

Istnieje co najmniej kilkanaście sposobów przekazania tablicy lub listy do zapytania; każdy ma swoje unikalne zalety i wady.

  • Parametry wyceniane w tabeli. Tylko SQL Server 2008 i nowszy, prawdopodobnie najbliższy uniwersalnemu „najlepszemu” podejściu.
  • Metoda iteracyjna. Przeciągnij oddzielony ciąg i wykonaj pętlę przez niego.
  • Korzystanie z CLR. SQL Server 2005 i nowsze wersje tylko z języków .NET.
  • XML. Bardzo dobry do wstawiania wielu rzędów; może być przesadą dla SELECTów.
  • Tabela liczb. Wyższa wydajność/złożoność niż prosta metoda iteracyjna.
  • Elementy o stałej długości. Stała długość poprawia prędkość nad oddzielonym ciągiem
  • Funkcja liczb. Odmiany tabeli liczb i stałej długości, w których liczby są generowane w funkcji, a nie pobierane z tabeli.
  • Rekurencyjne wyrażenie wspólnej tabeli (CTE). SQL Server 2005 i nowszy, wciąż niezbyt złożony i wyższa wydajność niż metoda iteracyjna.
  • Dynamiczny SQL. Może być powolny i ma wpływ na bezpieczeństwo.
  • Przekazywanie listy wielu parametrów. Żmudne i podatne na błędy, ale proste.
  • Naprawdę wolne metody. Metody wykorzystujące charindex, patindex lub LIKE.

Naprawdę nie mogę wystarczająco polecić, aby przeczytać artykuł, aby dowiedzieć się o kompromisach między wszystkimi tymi opcjami.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak rozszerzyć wartości oddzielone przecinkami do oddzielnych wierszy przy użyciu programu SQL Server 2005?

  2. Jak mogę przejść do przechowywanej procedury SQL Server z mojego kodu C#?

  3. Java JDBC:daty konsekwentnie dwa dni wolne

  4. Metoda SqlDataAdapter.Fill wolno

  5. SQL Server Error 111:„… musi być pierwszą instrukcją w partii kwerendy”