sql >> Base de Datos >  >> RDS >> Sqlserver

Procedimiento almacenado T-SQL que acepta múltiples valores de Id.

Erland Sommarskog ha mantenido la respuesta autorizada a esta pregunta durante los últimos 16 años:Matrices y listas en SQL Server .

Hay al menos una docena de formas de pasar una matriz o lista a una consulta; cada uno tiene sus propios pros y contras únicos.

  • Parámetros con valores de tabla. Solo SQL Server 2008 y superior, y probablemente el más cercano a un enfoque "mejor" universal.
  • El método iterativo. Pase una cadena delimitada y realice un bucle a través de ella.
  • Uso de CLR. SQL Server 2005 y superior solo desde lenguajes .NET.
  • XML. Muy bueno para insertar muchas filas; puede ser excesivo para los SELECT.
  • Tabla de números. Mayor rendimiento/complejidad que el método iterativo simple.
  • Elementos de longitud fija. La longitud fija mejora la velocidad sobre la cadena delimitada
  • Función de los números. Variaciones de Table of Numbers y de longitud fija donde el número se genera en una función en lugar de tomarse de una tabla.
  • Expresión de tabla común recursiva (CTE). SQL Server 2005 y superior, aún no demasiado complejo y de mayor rendimiento que el método iterativo.
  • SQL dinámico. Puede ser lento y tiene implicaciones de seguridad.
  • Pasar la lista como muchos parámetros. Tedioso y propenso a errores, pero simple.
  • Métodos realmente lentos. Métodos que usan charindex, patindex o LIKE.

Realmente no puedo recomendar lo suficiente como para leer el artículo para conocer las ventajas y desventajas entre todas estas opciones.