Un método que quizás desee considerar si va a trabajar mucho con los valores es escribirlos primero en una tabla temporal. Entonces solo te unes a él como de costumbre.
De esta manera, solo estás analizando una vez.
Es más fácil usar uno de los UDF 'Split', pero tanta gente ha publicado ejemplos de eso, pensé que iría por una ruta diferente;)
Este ejemplo creará una tabla temporal para que se una (#tmpDept) y la complete con los ID del departamento que ingresó. Supongo que los está separando con comas, pero puede, por supuesto, cambiar a lo que quieras.
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
Esto le permitirá pasar una identificación de departamento, múltiples identificaciones con comas entre ellas, o incluso múltiples identificaciones con comas y espacios entre ellas.
Entonces, si hiciste algo como:
SELECT Dept.Name
FROM Departments
JOIN #tmpDept ON Departments.DepartmentID=#tmpDept.DeptID
ORDER BY Dept.Name
Vería los nombres de todas las ID de departamento que pasó ...
Nuevamente, esto se puede simplificar usando una función para llenar la tabla temporal ... Principalmente lo hice sin una solo para matar el aburrimiento :-P
- Kevin Fairchild