sql >> Database >  >> RDS >> Sqlserver

Opgeslagen T-SQL-procedure die meerdere id-waarden accepteert

Erland Sommarskog heeft de afgelopen 16 jaar het gezaghebbende antwoord op deze vraag behouden:Arrays en lijsten in SQL Server .

Er zijn minstens een dozijn manieren om een ​​array of lijst door te geven aan een query; elk heeft zijn eigen unieke voor- en nadelen.

  • Parameters met tabelwaarde. Alleen SQL Server 2008 en hoger, en waarschijnlijk het dichtst bij een universele "beste" benadering.
  • De iteratieve methode. Geef een begrensde string door en loop er doorheen.
  • De CLR gebruiken. Alleen SQL Server 2005 en hoger van .NET-talen.
  • XML. Zeer goed voor het invoegen van veel rijen; kan overdreven zijn voor SELECT's.
  • Tabel met getallen. Hogere prestaties/complexiteit dan een eenvoudige iteratieve methode.
  • Elementen met vaste lengte. Vaste lengte verbetert de snelheid over de begrensde string
  • Functie van getallen. Variaties van de tabel met getallen en een vaste lengte waarbij het getal wordt gegenereerd in een functie in plaats van uit een tabel.
  • Recursieve Common Table Expression (CTE). SQL Server 2005 en hoger, nog steeds niet te complex en hogere prestaties dan de iteratieve methode.
  • Dynamische SQL. Kan traag zijn en heeft gevolgen voor de veiligheid.
  • De lijst passeren als zoveel parameters. Vervelend en foutgevoelig, maar eenvoudig.
  • Echt trage methoden. Methoden die charindex, patindex of LIKE gebruiken.

Ik kan echt niet genoeg aanbevelen om het artikel te lezen om meer te weten te komen over de afwegingen tussen al deze opties.



  1. Voer SQL-scripts uit in een multitenant-omgeving met catcon.pl

  2. Een weergave coderen in SQL Server

  3. kruistabel met 2 (of meer) rijnamen

  4. Pg_dump gebruiken om alleen insert-instructies uit één tabel binnen de database te krijgen