SQL dinamico elencato in alcune delle risposte è sicuramente una soluzione. Tuttavia, se SQL dinamico deve essere evitato, una delle soluzioni che preferisco è fare uso di variabili di tabella (o tabelle temporanee) per memorizzare il valore del parametro che viene utilizzato per il confronto nella clausola WHERE.
Ecco un esempio di implementazione di stored procedure.
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
Nel caso si desideri passare più valori, allora i valori separati da virgola possono essere memorizzate come righe nella variabile di tabella e utilizzati allo stesso modo per il confronto.
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
Perché vuoi? Si finisce con nessuno dei vantaggi di una stored procedure con tutti i costi. –
Penso che non sia un buon uso per una stored procedure. Amir ti dà una possibilità ma nel tuo caso penso che userò una vista. – DomreiRoam
Joel e Jeff parlano di Parametrizzazione SQL in Podcast 31. https://stackoverflow.fogbugz.com/default.asp?W26423 –