dynamische SQL in einigen der Antworten aufgelistet ist auf jeden Fall eine Lösung. Wenn jedoch Dynamic SQL vermieden werden muss, ist eine der Lösungen, die ich bevorzuge, die Verwendung von Tabellenvariablen (oder temporären Tabellen), um den Parameterwert zu speichern, der für den Vergleich in der WHERE-Klausel verwendet wird.
Hier ist ein Beispiel für die Implementierung einer gespeicherten Prozedur.
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
Falls Sie in mehr Werten übergeben will, dann kann die comma separated values als Zeilen in der Tabelle variabel und in der gleichen Art und Weise zum Vergleich herangezogen werden gespeichert.
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
Warum möchten Sie? Sie erhalten keinen Vorteil einer gespeicherten Prozedur mit allen Kosten. –
Ich denke, das ist keine gute Verwendung für eine gespeicherte Prozedur. Amir gibt dir eine Möglichkeit, aber in deinem Fall denke ich, dass ich eine Sichtweise verwende. – DomreiRoam
Joel und Jeff sprechen über SQL-Parametrisierung in Podcast 31. https://stackoverflow.fogbugz.com/default.asp?W26423 –