Tenemos un problema similar en una aplicación escrita para MS SQL Server 7. Aunque me gusta la solución utilizada, no somos conscientes de algo mejor ...
existen soluciones 'mejor' en 2008 en la medida de como sé, pero tenemos clientes Cero usando eso :)
Creamos una función definida por el usuario con una tabla que toma una cadena de ID delimitada por comas, y devuelve una tabla de ID. El SQL entonces lee razonablemente bien, y ninguno de ellos es dinámico, pero aún existe la molesta sobrecarga doble:
1.Cliente concatena los identificadores en la cadena
2. SQL Server analiza la cadena para crear una tabla de identificadores de
Hay muchas formas de convertir '1,2,3,4,5' en una tabla de identificadores, pero el procedimiento almacenado que utiliza la función termina pareciéndose ...
CREATE PROCEDURE my_road_to_hell @IDs AS VARCHAR(8000)
AS
BEGIN
SELECT
*
FROM
myTable
INNER JOIN
dbo.fn_split_list(@IDs) AS [IDs]
ON [IDs].id = myTable.id
END
ALÉJATE de la opción LIKE. Las conversiones de cadenas son lentas, las comparaciones de cadenas son lentas, y LIKE '% ...%' significa que los índices no se pueden usar. No puedo exagerar cuánto se debe evitar esta opción (imo). – MatBailie