Si vous avez l'intention de travailler souvent avec les valeurs, vous pouvez envisager de les écrire d'abord dans une table temporaire. Ensuite, il suffit de les joindre comme d'habitude.
De cette façon, vous n'effectuez qu'une seule analyse syntaxique.
Le plus simple est d'utiliser l'un des UDF 'Split', mais tant de personnes ont posté des exemples de ces UDF, que je me suis dit que j'allais prendre une autre voie ;)
Cet exemple créera une table temporaire sur laquelle vous pourrez vous joindre (#tmpDept) et la remplira avec les identifiants de département que vous avez fournis. Je suppose que vous les séparez par des virgules, mais vous pouvez - bien sûr - les modifier comme vous le souhaitez.
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
Cela vous permettra de transmettre un seul identifiant de département, plusieurs identifiants séparés par des virgules, ou même plusieurs identifiants séparés par des virgules et des espaces.
Donc si vous avez fait quelque chose comme :
SELECT Dept.Name
FROM Departments
JOIN #tmpDept ON Departments.DepartmentID=#tmpDept.DeptID
ORDER BY Dept.Name
Vous verriez les noms de tous les ID de département que vous avez passés dans...
Encore une fois, cela peut être simplifié en utilisant une fonction pour remplir la table temporaire... Je l'ai principalement fait sans fonction, juste pour tuer l'ennui :-P
-- Kevin Fairchild