Duplicar posible:
Need help in dynamic query with IN Clausela creación dinámica de la cláusula IN en un procedimiento almacenado
estoy usando SQL Server 2008 y este es el problema que estoy enfrentando. Tengo una tabla llamada Cars with a column Company. Ahora tengo un procedimiento almacenado que se ve algo como esto
CREATE PROCEDURE FindCars (@CompanyNames varchar(500)) AS SELECT * FROM Cars WHERE Company IN (@CompanyNames)
Probé algo como esto y fallé
DECLARE @CompanyNames varchar(500) SET @CompanyNames = '''Ford'',''BMW''' exec FindCars @CompanyNames
que no consigue cualesquiera filas devueltas. Cuando hago lo siguiente
DECLARE @CompanyNames varchar(500) SET @CompanyNames = '''Ford'',''BMW''' Select @CompanyNames
me sale el siguiente resultado
'Ford','BMW'
y si puedo reemplazar este valor en la instrucción de selección dentro del procedimiento almacenado, funciona
SELECT * FROM Cars where Company in ('Ford','BMW')
Así me piense que el procedimiento almacenado parece tratar 'Ford','BMW'
como una cadena en lugar de una matriz. Podría alguien ayudarme con esto, por favor. ¿Cómo construyo dinámicamente la cadena/matriz requerida en la cláusula IN de la instrucción select dentro del procedimiento almacenado?
sólo para añadir un punto, creo que esto es mejor SELECT * de automóviles Unión interior ( \t SELECCIONE elemento FROM dbo.split_string (@input_string) ) k en K.Item = Company' porque estás haciendo una iteración usando 'IN' Predicate –
El primer método es el que yo recomiendo, aquí puedes encontrar una buena función de división: [http://www.sqlservercentral.com/articles/Tally+Table /72993/](http://www.sqlservercentral.com/articles/Tally+Table/72993/) – lennin92