Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Procedura memorizzata T-SQL che accetta più valori ID

Erland Sommarskog ha mantenuto l'autorevole risposta a questa domanda negli ultimi 16 anni:Array ed elenchi in SQL Server .

Esistono almeno una dozzina di modi per passare un array o un elenco a una query; ognuno ha i suoi pro e contro unici.

  • Parametri con valori di tabella. Solo SQL Server 2008 e versioni successive e probabilmente il più vicino a un approccio "migliore" universale.
  • Il metodo iterativo. Passa una stringa delimitata e scorrela.
  • Utilizzo del CLR. SQL Server 2005 e versioni successive solo da linguaggi .NET.
  • XML. Ottimo per inserire molte righe; potrebbe essere eccessivo per SELECT.
  • Tabella dei numeri. Prestazioni/complessità superiori rispetto al semplice metodo iterativo.
  • Elementi a lunghezza fissa. La lunghezza fissa migliora la velocità sulla stringa delimitata
  • Funzione dei numeri. Variazioni di Table of Numbers e lunghezza fissa in cui i numeri sono generati in una funzione piuttosto che presi da una tabella.
  • Espressione di tabella comune ricorsiva (CTE). SQL Server 2005 e versioni successive, ancora non troppo complesso e con prestazioni superiori rispetto al metodo iterativo.
  • SQL dinamico. Può essere lento e ha implicazioni sulla sicurezza.
  • Passare l'elenco come molti parametri. Noioso e soggetto a errori, ma semplice.
  • Metodi davvero lenti. Metodi che utilizzano charindex, patindex o LIKE.

Non posso davvero raccomandare abbastanza per leggere l'articolo per conoscere i compromessi tra tutte queste opzioni.