Einzelnen Beitrag anzeigen

raiguen
(Gast)

n/a Beiträge
 
#12

Re: [SQL] Select mit dynamischer Parameteranzahl

  Alt 20. Feb 2009, 23:47
Moin

WIe wär es mit einer Function im MSSQL-Server?

Hab aus meinen Datenwühl-Verzeichnis mal was rausgekramt, was dir evtl weiterhelfen könnte (ohne Gewähr auf Funktionalität!):
SQL-Code:
CREATE FUNCTION [dbo].[fn_StringListToRecordset](@cList text)
RETURNS @retTable TABLE(Value varchar(50))
AS
BEGIN
DECLARE @aValue varchar(50),
@aStartChar int,
@aEndChar int;

IF DATALENGTH ( @cList ) > 2
BEGIN
SET @aStartChar = 1;
WHILE (CHARINDEX(',', @cList,@aStartChar) <> 0)
BEGIN
SET @aEndChar = CHARINDEX(',', @cList,@aStartChar);
SET @aValue = SUBSTRING(@cList, @aStartChar, @aEndChar - @aStartChar);
SET @aStartChar = @aEndChar + 1;
INSERT INTO @rettable(Value) VALUES(RTRIM(LTRIM(@aValue)));
END

SET @aValue = SUBSTRING(@cList, @aStartChar, DATALENGTH(@cList) - @aStartChar + 1);
INSERT INTO @rettable(Value) VALUES(RTRIM(LTRIM(@aValue)));
END

RETURN
END
Woher ich diesen Beispielcode habe, weiss ich nicht mehr (irgendwo im WWW...)

Prinzipiell funktioniert das ja so: an die Function eine 'Parameterliste' übergeben
SELECT * FROM fn_StringListToRecordset('"A","B","C"') ; diese wird durch die WHILE-Schleife abgearbeitet und die Ergebnisse in einer Rückgabetabelle eingetragen.
Im Prinzip liefert die Function ja das hier:
SQL-Code:
SELECT Name FROM Tabelle
WHERE Name like '%Meier%or Name like '%Mueller%'
oder andere Schreibweise:
SQL-Code:
SELECT Name
FROM Tabelle
WHERE Name like '%Meier%
UNION
SELECT Name FROM Tabelle WHERE Name like '%Mueller%
Also für Deinen Fall: egal, nach welchen Namen du suchen/filtern willst: alle 'Kandidaten' in die Übergabeliste eintragen und die entgsprechenden Datensätze werden dann aufgelistet... Natürlich musst du die Function da oben entsprechend deine Erfordernissen anpassen, aber ich denke der Weg dürfte klar sein!?

Rainer
  Mit Zitat antworten Zitat