Один із методів, який ви хочете розглянути, якщо ви збираєтесь працювати з значеннями, - це спочатку записати їх у тимчасову таблицю. Тоді ви просто приєднуєтесь до нього як звичайне.
Таким чином, ти розбираєшся лише один раз.
Найпростіше використовувати один з "Спліт" АДС, але так багато людей опублікували приклади таких, я вважав, що я піду іншим маршрутом;)
Цей приклад створить вам тимчасову таблицю для приєднання (#tmpDept) і заповнить її ідентифікатором відділу, який ви передали. Я припускаю, що ви розділяєте їх комами, але ви, звичайно, можете змінити це все, що ви хочете.
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
Це дозволить вам передати один ідентифікатор відділу, кілька ідентифікаторів із комами між ними, або навіть кілька ідентифікаторів із комами та пробілами між ними.
Тож якщо ви зробили щось на кшталт:
SELECT Dept.Name
FROM Departments
JOIN #tmpDept ON Departments.DepartmentID=#tmpDept.DeptID
ORDER BY Dept.Name
Ви побачите назви всіх ідентифікаторів відділу, які ви передали в ...
Знову ж таки, це можна спростити, використовуючи функцію для заповнення тимчасової таблиці ... Я в основному це робив без однієї, аби просто вбити нудьгу :-P
- Кевін Ферчільд