SQL dinámico aparece en algunas de las respuestas es definitivamente una solución. Sin embargo, si se debe evitar el uso de SQL dinámico, una de las soluciones que prefiero es usar variables de tablas (o tablas temporales) para almacenar el valor del parámetro que se utiliza para comparar en la cláusula WHERE.
Aquí hay un ejemplo de implementación de Procedimiento almacenado.
CREATE PROCEDURE [dbo].[myStoredProc]
@parameter1 varchar(50)
AS
declare @myTempTableVar Table(param1 varchar(50))
insert into @myTempTableVar values(@parameter1)
select * from MyTable where MyColumn in (select param1 from @myTempTableVar)
GO
En caso de que desea pasar de múltiples valores, los valores separados por comas se pueden almacenar como filas de la variable de tabla y se utilizan de la misma manera para la comparación.
CREATE PROCEDURE [dbo].[myStoredProc]
@parameter1 varchar(50)
AS
--Code Block to Convert Comma Seperated Parameter into Values of a Temporary Table Variable
declare @myTempTableVar Table(param1 varchar(50))
declare @index int =0, @tempString varchar(10)
if charindex(',',@parameter1) > 0
begin
set @index = charindex(',',@parameter1)
while @index > 0
begin
set @tempString = SubString(@parameter1,1,@index-1)
insert into @myTempTableVar values (@tempString)
set @parameter1 = SubString(@parameter1,@index+1,len(@parameter1)[email protected])
set @index = charindex(',',@parameter1)
end
set @tempString = @parameter1
insert into @myTempTableVar values (@tempString)
end
else
insert into @myTempTableVar values (@parameter1)
select * from MyTable where MyColumn in (select param1 from @myTempTableVar)
GO
¿Por qué le gustaría? Usted termina sin el beneficio de un procedimiento almacenado con todo el costo. –
Creo que no es un buen uso para un procedimiento almacenado. Amir te da una posibilidad, pero en tu caso, creo que usaría una vista. – DomreiRoam
Joel y Jeff hablan sobre la parametrización de SQL en Podcast 31. https://stackoverflow.fogbugz.com/default.asp?W26423 –