Eine Methode, die Sie in Betracht ziehen sollten, wenn Sie häufig mit den Werten arbeiten, besteht darin, sie zuerst in eine temporäre Tabelle zu schreiben. Dann machst du einfach wie gewohnt mit.
Auf diese Weise analysieren Sie nur einmal.
Es ist am einfachsten, eine der 'Split'-UDFs zu verwenden, aber so viele Leute haben Beispiele dafür veröffentlicht, dass ich dachte, ich würde einen anderen Weg gehen;)
In diesem Beispiel wird eine temporäre Tabelle erstellt, an der Sie teilnehmen können (#tmpDept), und diese mit den von Ihnen übergebenen Abteilungs-IDs gefüllt. Ich gehe davon aus, dass Sie sie durch Kommas trennen, aber Sie können sie natürlich ändern es zu was auch immer Sie wollen.
IF OBJECT_ID('tempdb..#tmpDept', 'U') IS NOT NULL
BEGIN
DROP TABLE #tmpDept
END
SET @DepartmentIDs=REPLACE(@DepartmentIDs,' ','')
CREATE TABLE #tmpDept (DeptID INT)
DECLARE @DeptID INT
IF IsNumeric(@DepartmentIDs)=1
BEGIN
SET @DeptID=@DepartmentIDs
INSERT INTO #tmpDept (DeptID) SELECT @DeptID
END
ELSE
BEGIN
WHILE CHARINDEX(',',@DepartmentIDs)>0
BEGIN
SET @DeptID=LEFT(@DepartmentIDs,CHARINDEX(',',@DepartmentIDs)-1)
SET @DepartmentIDs=RIGHT(@DepartmentIDs,LEN(@DepartmentIDs)-CHARINDEX(',',@DepartmentIDs))
INSERT INTO #tmpDept (DeptID) SELECT @DeptID
END
END
Auf diese Weise können Sie eine Abteilungs-ID, mehrere IDs mit Kommas dazwischen oder sogar mehrere IDs mit Kommas und Leerzeichen dazwischen übergeben.
Also, wenn Sie so etwas gemacht haben:
SELECT Dept.Name
FROM Departments
JOIN #tmpDept ON Departments.DepartmentID=#tmpDept.DeptID
ORDER BY Dept.Name
Sie sehen die Namen aller Abteilungs-IDs, die Sie übergeben haben ...
Auch dies kann vereinfacht werden, indem eine Funktion zum Auffüllen der temporären Tabelle verwendet wird ... Ich habe es hauptsächlich ohne eine getan, nur um Langeweile zu vertreiben :-P
- Kevin Fairchild